手把手教你开发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 ...
随机推荐
- Katalon Studio 安装 配置 简单使用
本教程只针对Katalon Studio进行演示操作. 一.下载 Katalon 官网下载地址:https://www.katalon.com/download/ (需要注册账号) 二.解压.配置 直 ...
- 微擎we7模块和模板安装方法
2017年06月08日 09:26:55 源码学习分享 阅读数:15643 标签: we7 更多 个人分类: 微擎we7 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- charsets - 程序员对字符集和国际化的观点
描述 Linux 是一个国际性的操作系统.它的各种各样实用程序和设备驱动程序 (包括控制台驱动程序 ) 支持多种语言的字符集,包括带有附加符号的拉丁字母表字符,重音符,连字(字母结合), 和全部非拉丁 ...
- 導出Excel方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- JavaScript 原生代码找对象的方法
1. id : document.getElementById('id') 2. 标签 : document.getElementsByTagName('标签') //获得的是一个标签数组 3. N ...
- Java IO(一)--File类
File类不是单指文件,它既可以代表一个文件名称,又可以代表一个目录下的一组文件.可以用来创建.删除.遍历文件等 public static void main(String[] args) { St ...
- Laravel Excel安装及最简单使用
官网:https://docs.laravel-excel.com/ 1.安装 1.1.安装要求: PHP: ^7.0 Laravel: ^5.5 PhpSpreadsheet: ^1.6 ...
- 使用webpack+vue.js构建前端工程化
参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...
- python3+beautifulSoup4.6抓取某网站小说(一)爬虫初探
本次学习重点: 1.使用urllib的request进行网页请求,获取当前url整版网页内容 2.对于多级抓取,先想好抓取思路,再动手 3.BeautifulSoup获取html网页中的指定内容 4. ...
- 零基础入门学习Python(20)--函数:内嵌函数和闭包
知识点 global关键字 使用global关键字,可以修改全局变量: >>> count = 5 >>> def Myfun(): count = 10 prin ...