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

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

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

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

2011040122265236.png

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

2011040122300338.png

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

2011040122312433.png

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

2011040122333935.png

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

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

为了避免全局变量,使用匿名函数方式,所有事件处理及数据绑定均在此函数中进行,同时定义与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/walkingp/archive/2011/04/02/2002668.html

你可能感兴趣的文章
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
latex tree
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
css3学习01
查看>>
【USACO】 奶牛会展
查看>>
ActiveMQ笔记之点对点队列(Point-to-Point)
查看>>
继承和多态
查看>>
Dijkstra+计算几何 POJ 2502 Subway
查看>>
修复IE不能执行JS的方法
查看>>
程序员究竟该如何提高效率zt
查看>>