手把手教你开发Chrome扩展二:为html添加行为
上一节我们已经讲了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(); })(); |
代码中尚未实现的部分,我们将会在下节详细讲解其实现。
手把手教你开发Chrome扩展二:为html添加行为的更多相关文章
- 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩 ...
- 手把手教你开发chrome扩展
转载:http://www.cnblogs.com/walkingp/archive/2011/04/04/2003875.html 手把手教你开发chrome扩展一:开发Chrome Extenst ...
- 手把手教你开发Chrome扩展三:关于本地存储数据
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...
- 开发 chrome 扩展 GitHub-Remarks 的一些想法以及遗憾
前文 对于单页应用中如何监听 URL 变化的思考 说到我在开发 chrome 扩展 GitHub Remarks 中遇到的一个问题,本文来聊聊开发这个扩展的前后心路历程. 为什么开发这个扩展?前文说到 ...
- 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚
新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...
- 手把手教你使用Vuex(二)
在上一篇文章Vuex(一)中我们已经把Vuex需要用到的属性的单独页面引入到了store/index.js里面,所以我们接下来直接在这些js文件中写自己需要的代码就好. 1.Getter 了解:Get ...
- 【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序
关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...
- ----转载----【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序
关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...
- 手把手教你开发BLE数据透传应用程序
如何开发BLE数据透传应用程序?什么是BLE service和characteristic?如何开发自己的service和characteristic?如何区分ATT和GATT?有没有什么工具可以对B ...
随机推荐
- hibernate 批量插入数据
如题,有两种方法 1)使用FLUSH 2)使用JDBC 分别来解释: 1)hibernate在进行数据库操作的时候,都要有事务支持的.可能你曾遇到过,没有加事务,程序会报错的情况. 而事务每次提交的时 ...
- Quartz2D知识点聚合案例
Quartz2D知识点聚合 基本 //画图片 UIImage *image = [UIImage imageNamed:@"阿狸头像"]; [image drawInRect:re ...
- OpenGL Column-Major Matrix 使用注意事项
这column major的矩阵是彻底把我搞晕了,以后右乘规则下的矩阵应该这么用 假设我想创建一个2x2的矩阵,数学上我这么写: 1 2 3 4 用代码创建的话这么写 // 按照 row major ...
- 查看外网IP
同一个网络,登录不同网站/APP, 显示的登录IP可能不一样. 输入ip138.com 得到外网IP: 输入:http://www.net.cn/static/customercare/yourip. ...
- sehlle脚本获取linux服务器基本信息
将以下代码全选复制在linux机器上新建x.sh文件编辑复制进去执行即可. #获取linux服务器基本信息脚本 #!/bin/bash # #Name:system_info #Ver:1.0 #Au ...
- Webstorm 的 Tab 键调整缩进值
两步即可,注意版本
- 防止asp.net连续点击按钮重复提交
1.在Page_Load中添加如下代码: protected void Page_Load(object sender, EventArgs e) { this.btnEdit.Attributes[ ...
- QT5:先导篇 正则表达式
一.简介 使用正则表达式可以快速完成处理字符串的一些操作,如验证 查找 替换和分割 Qt的QRegExp类是正则表达式的表示类,它基于Perl的正则表达式语言 正则表达式由表达式(expression ...
- MySQL和Oracle的比较
可以从以下几个方面来进行比较: (1) 对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮(2) 分页查询 ...
- 【spring】jar包详解与模块依赖关系
以spring3.X为例 jar包详解 1. spring-core.jar:包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心: 2. spri ...