博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你开发Chrome扩展二:为html添加行为
阅读量:4357 次
发布时间:2019-06-07

本文共 3538 字,大约阅读时间需要 11 分钟。

上一节我们已经讲了Chrome扩展的基础知识,并构建了基础的html,这一节我们将就html DOM添加部分添加脚本,即脚本在我们的popup页面中进行的操作,页面所产生的变化。

正常情况下数据处理加载完成状态,这些数据是从本地数据读取的。

点击“添加新项”,出现输入框,输入文字后回车提交数据:

添加完成后将数据存储,同时添加DOM元素:

考虑到功能最简化处理,点击已标为完成的任务,将提示“删除或重置为未完成”:

以上功能为最核心功能,可以在此基础上进行扩展,比如任务分组,修改任务,任务提醒,网络同步数据等等。

下面开始相应的脚本内容。

为了避免全局变量,使用匿名函数方式,所有事件处理及数据绑定均在此函数中进行,同时定义与jQuery中的$()类似的函数:

(
function
(){
    
var 
$=
function
(id){
return 
document.getElementById(id);}
})();

建立Tasks对象,定义show()函数和hide()函数,同时存储几个常用的DOM对象。

var 
Tasks = {
  
show:
function
(obj){
    
obj.className=
''
;
    
return 
this
;
  
},
  
hide:
function
(obj){
    
obj.className=
'hide'
;
    
return 
this
;
  
},
  
//存储dom
  
$addItemDiv:$(
'addItemDiv'
),
  
$addItemInput:$(
'addItemInput'
),
  
$txtTaskTitle:$(
'txtTaskTitle'
),
  
$taskItemList:$(
'taskItemList'
)
}

其中show()函数和hide()函数均使用了链式调用,每次执行此函数均会返回对象本身,这样对象就可以使用形如类似jQuery书写方式来使用此函数。

然后注册事件:

//.....
//初始化
init:
function
(){
    
/*注册事件*/
    
//打开添加文本框
    
Tasks.$addItemDiv.addEventListener(
'click'
,
function
(){
        
Tasks.show(Tasks.$addItemInput).hide(Tasks.$addItemDiv);
        
Tasks.$txtTaskTitle.focus();
    
},
true
);
    
//回车添加
    
Tasks.$txtTaskTitle.addEventListener(
'keyup'
,
function
(ev){
        
var 
ev=ev || window.event;
        
if
(ev.keyCode==13){
            
//TODO:写入本地数据
            
Tasks.AppendHtml(task);
            
Tasks.$txtTaskTitle.value=
''
;
            
Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
        
}
        
ev.preventDefault();
    
},
true
);
    
//取消
    
Tasks.$txtTaskTitle.addEventListener(
'blur'
,
function
(){
        
Tasks.$txtTaskTitle.value=
''
;
        
Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
    
},
true
);
    
//TODO:初始化数据,加载本地数据,生成html         
},
//....

其中待完成部分为我们下一节将重点计到的html5的本地存储功能。再定义数据操作部分,先写上空白函数:

//....
//增加
Add:
function
(){
    
//TODO
},
//修改
Edit:
function
(){
    
//TODO
},
//删除
Del:
function
(){
    
//TODO
},
//...

还需要初始化此函数使其执行并让匿名函数执行:

(
function
(){
    
var 
Tasks = {
//***
    
}
    
Tasks.init();
})();

好吧,以下就是本节中所要提到的全部代码:

(
function
(){
    
var 
$=
function
(id){
return 
document.getElementById(id);}
    
var 
Tasks = {
        
show:
function
(obj){
            
obj.className=
''
;
            
return 
this
;
        
},
        
hide:
function
(obj){
            
obj.className=
'hide'
;
            
return 
this
;
        
},
        
//存储dom
        
$addItemDiv:$(
'addItemDiv'
),
        
$addItemInput:$(
'addItemInput'
),
        
$txtTaskTitle:$(
'txtTaskTitle'
),
        
$taskItemList:$(
'taskItemList'
),
        
//初始化
        
init:
function
(){
            
/*注册事件*/
            
//打开添加文本框
            
Tasks.$addItemDiv.addEventListener(
'click'
,
function
(){
                
Tasks.show(Tasks.$addItemInput).hide(Tasks.$addItemDiv);
                
Tasks.$txtTaskTitle.focus();
            
},
true
);
            
//回车添加
            
Tasks.$txtTaskTitle.addEventListener(
'keyup'
,
function
(ev){
                
var 
ev=ev || window.event;
                
if
(ev.keyCode==13){
                    
//TODO:写入本地数据
                    
Tasks.AppendHtml(Tasks.$txtTaskTitle.value);
                    
Tasks.$txtTaskTitle.value=
''
;
                    
Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
                
}
                
ev.preventDefault();
            
},
true
);
            
//取消
            
Tasks.$txtTaskTitle.addEventListener(
'blur'
,
function
(){
                
Tasks.$txtTaskTitle.value=
''
;
                
Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
            
},
true
);
            
//TODO:初始化数据,加载本地数据,生成html         
        
},
        
//增加
        
Add:
function
(){
            
//TODO
        
},
        
//修改
        
Edit:
function
(){
            
//TODO
        
},
        
//删除
        
Del:
function
(){
            
//TODO
        
},
        
AppendHtml:
function
(title){
            
var 
oDiv=document.createElement(
'div'
);
            
oDiv.className=
'taskItem'
;
            
var 
oLabel=document.createElement(
'label'
);
            
oLabel.className=
'on'
;
            
var 
oSpan=document.createElement(
'span'
);
            
oSpan.className=
'taskTitle'
;
            
var 
oText=document.createTextNode(title);
            
oSpan.appendChild(oText);
            
oDiv.appendChild(oLabel);
            
oDiv.appendChild(oSpan);
            
//注册事件
            
oDiv.addEventListener(
'click'
,
function
(){
                
//TODO
            
},
true
);
            
Tasks.$taskItemList.appendChild(oDiv); 
        
},
        
RemoveHtml:
function
(){
            
//TODO
        
}
    
}
    
Tasks.init();
})();

代码中尚未实现的部分,我们将会在下节详细讲解其实现。

转载于:https://www.cnblogs.com/h2zZhou/p/7250072.html

你可能感兴趣的文章
简单选项卡加圆角
查看>>
soritong MP3播放器缓冲区溢出漏洞分析
查看>>
17.10.24 数据最水的一次考试
查看>>
python_SMTP and POP3
查看>>
lambda匿名函数
查看>>
js常用方法
查看>>
建造者模式
查看>>
Spring入门教程:通过MyEclipse开发第一个Spring项目
查看>>
【转】你可能不知道的Shell
查看>>
廖雪峰Java1-2程序基础-1基本结构
查看>>
golang下的grpc
查看>>
1. 自动化运维系列之Cobbler自动装机
查看>>
ASP.NET MVC Model绑定(二)
查看>>
一步一步写算法(之hash表)
查看>>
漫谈并发编程(一) - 并发简单介绍
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
System.currentTimeMillis();
查看>>
javascript中使用Map
查看>>
C# DataTable的詳細使用方法
查看>>
【转】Android的线程和线程池(AsyncTask)
查看>>