黄聪:360浏览器、chrome开发扩展插件教程(2)为html添加行为
转载:http://www.cnblogs.com/walkingp/archive/2011/04/02/2002668.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(); })(); |
代码中尚未实现的部分,我们将会在下节详细讲解其实现。
黄聪:360浏览器、chrome开发扩展插件教程(2)为html添加行为的更多相关文章
- 黄聪:360浏览器、chrome开发扩展插件教程(3)关于本地存储数据
转载:http://www.cnblogs.com/walkingp/archive/2011/04/04/2003875.html HTML5中的localStorage localStorage与 ...
- 黄聪:360浏览器、chrome开发扩展插件教程(1)开发Chrome Extenstion其实很简单
转载:http://www.cnblogs.com/walkingp/archive/2011/03/31/2001628.html Chrome的更新速度可以说前无古人,现在我每天开机的第一件事就是 ...
- 黄聪:将自己开发的插件发布到WordPress官方插件站(转)
原文作者:我爱水煮鱼 把你的插件发布到 WordPress 官方插件目录是让更多人用到插件的好方法,这样可以让你的插件不仅仅给我们中国人民使用,而且还可以让你的插件给全世界人民使用,想想全世界人民都在 ...
- Chrome浏览器录屏扩展插件
Chrome浏览器录屏扩展插件,可以录制网页操作或者桌面操作.生成MP4 Loom https://chrome.google.com/webstore/detail/loom-video-recor ...
- 黄聪:《跟黄聪学WordPress主题开发》
又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...
- 提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件
Chrome插件,官方名称extensions(扩展程序):为了方便理解,以下都称为插件. 我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开 ...
- 黄聪:360、chrome开发插件扩展如何跨域调用其他网站的信息并且显示在扩展、tab中的api
chrome插件提供了查找tab的api chrome.tabs.get(integer tabId, function callback) 但是出于安全的考虑,tab的属性中没有document 因 ...
- 我的chrome 智能扩展插件copier开源了!!!
整理了下之前写的chrome-extensions-copier,分享给大家. 这个插件呢,主要用来在chrome浏览器上复制某些网站的某些特定内容,主要是用来复制代码,提高效率!(没办法,某些网站不 ...
- chrome安装扩展插件出现-crx_header_invalid问题
1. 将*.crx文件重命名为*.rar 2.将rar文件解压 3. 在chrome浏览器添加扩展程序时选择“加载已解压的扩展程序” 4.添加成功
随机推荐
- UVa 557 汉堡
https://vjudge.net/problem/UVA-557 题意: 有n个牛肉堡和n个鸡肉堡给2n个孩子吃.每个孩子在吃之前都要抛硬币,正面吃牛肉堡,反面吃鸡肉堡.如果剩下的所有汉堡都一样, ...
- /msgsrvmgr.cpp:4:26: fatal error: kdl/frames.hpp: No such file or directory #include <kdl/frames.hpp>
/home/xxx/ros_workspace/src/bp_protocol_bridge/protospot/src/msgsrvmgr.cpp::: fatal error: kdl/frame ...
- 强大的XML
2018-04-23 20:29:26 XML:Extensible Markup Language,也就是可扩展标记语言.XML和HTML格式是古老的标记通用语言SGML的衍生语言. XML文件是可 ...
- Rails Guide -- Ruby on Rake(未详细阅读)
一个软件task管理和build 自动化的工具. 它允许用户指定tasks和describe dependencies, 也可以在一个namespace中group tasks. 使用Ruby语言写的 ...
- js将json格式的list转换为按某个字段分组的map数组
这几天做的微信公众号项目中,出现了需要将list分组显示的需求,解决方法如下 var data = [{ "id": "32b80b76-a81e-4545-8065-1 ...
- html5 自带全屏API调用方法
function FullScreen(){ var el = $('html')[0];//要全屏的元素,如果要全页面全屏,建议使用html节点而不是body节点 var isFullscreen= ...
- HDU 4842 距离压缩DP
过河 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submissi ...
- LeetCode 46
// 又是可以用回溯法做的一道题.class Solution { public: vector<vector<int>> permute(vector<int>& ...
- 改变VO中的sql
cuxOptionVO.setFullSqlMode(cuxOptionVO.FULLSQL_MODE_AUGMENTATION); cuxOptionVO.setQuery(null); cuxOp ...
- PHP:第五章——字符串输出函数
<?php header("Content-Type:text/html;charset=utf-8"); /*字符串输出函数*/ //1.echo 输出一个或多个字符 // ...