一、document.getElementById('emoji').addEventListener('click', function(e) {

var emojiwrapper = document.getElementById('emojiWrapper');

emojiwrapper.style.display = 'block';

e.stopPropagation();

}, false);

(1)、e.stopPropagation():

定义和用法

不再派发事件。

终止事件在传播过程的捕获、目标处理或起泡阶段进一步传播。调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点。

(2)、addEventListener(‘click’,function(e){…..},false);

结合false的使用,会阻止元素的默认行为;

二、js阻止默认事件的方式有两种:

(1)、使用e.preventDefault()方法,例子如下

/**

* 1.阻止元素的默认事件,但是不会阻止事件冒泡

*/

var link = document.getElementsByTagName('a')[0];

link.addEventListener('click',function(e){

e.preventDefault();

});

(2)、如果是在jquery中,可以使用return false,例子如下:

/**

* 2.阻止元素的事件冒泡

* Jquery和原生的Js在这点上有些不同,

* 原生的Js要通过e.stopPropagation()方法阻止事件冒泡

* 而Jquery则可以直接return false;来阻止事件冒泡

* e.stopPropagation()方法不会阻止元素的默认行为,但是

* return false;会阻止元素的默认行为。

*/

var btn = document.getElementById('btn');

btn.addEventListener('click',function(e){

return false;

});

三、_initialEmoji: function() {

var emojiContainer = document.getElementById('emojiWrapper'),

docFragment = document.createDocumentFragment();

for (var i = 69; i > 0; i--) {

var emojiItem = document.createElement('img');

emojiItem.src = '../content/emoji/' + i + '.gif';

emojiItem.title = i;

docFragment.appendChild(emojiItem);

};

emojiContainer.appendChild(docFragment);

},

在《javascript高级程序设计》一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法:

· crateAttribute(name):        用指定名称name创建特性节点

· createComment(text):       创建带文本text的注释节点

· createDocumentFragment():     创建文档碎片节点

· createElement(tagname):       创建标签名为tagname的节点

· createTextNode(text):         创建包含文本text的文本节点

其中最感兴趣且以前没有接触过的一个方法是createComment(text)方法,书中介绍说:在更新少量节点的时候可以直接向document.body节点中添加,但是当要向document中添加大量数据是,如果直接添加这些新节点,这个过程非常缓慢,因为每添加一个节点都会调用父节点的appendChild()方法,为了解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片一次性添加到document中。

假如想创建十个段落,使用常规的方式可能会写出这样的代码:

1

2

3

4

5

6

for(var i = 0 ; i < 10; i ++) {

var p = document.createElement("p");

var oTxt = document.createTextNode("段落" + i);

p.appendChild(oTxt);

document.body.appendChild(p);

}

当然,这段代码运行是没有问题,但是他调用了十次document.body.appendChild(),每次都要产生一次页面渲染。这时碎片就十分有用了:

1

var oFragment = document.createDocumentFragment();

1

2

3

4

5

for(var i = 0 ; i < 10; i ++) {

var p = document.createElement("p");

var oTxt = document.createTextNode("段落" + i);

p.appendChild(oTxt);

oFragment.appendChild(p);<br>}

1

document.body.appendChild(oFragment);

在这段代码中,每个新的<p />元素都被添加到文档碎片中,然后这个碎片被作为参数传递给appendChild()。这里对appendChild()的调用实际上并不是把文档碎片本省追加到body元素中,而是仅仅追加碎片中的子节点,然后可以看到明显的性能提升,document.body.appenChild()一次替代十次,这意味着只需要进行一个内容渲染刷新。

几个原生js方法总结的更多相关文章

  1. 原生js方法document.getElementsByClassName在ie8及其以下的兼容性问题

    document.getElementsByClassName在ie8及其以下浏览器的兼容性问题,在ie8及其以下浏览器中不能使用,针对这个问题,下面给出详细的解决方法,感兴趣的朋友可以参考下     ...

  2. 常用原生JS方法总结(兼容性写法)

    经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...

  3. HTML DOM对象的属性和方法介绍(原生JS方法)

    HTML DOM对象的属性和方法介绍 DOM 是 Document Object Model(文档对象模型)的缩写. DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口), ...

  4. 常用原生JS方法

    备注:一下的方法都是包裹在一个EventUtil对象里面的,直接采用对象字面量定义方法了... ①添加事件方法 1 2 3 4 5 6 7 8 9 addHandler:function(elemen ...

  5. jq 与原生js 方法互相转换

    最近在用mui写页面,当然了在移动App里引入jq或zepto这些框架,肯定是极不理性的.虽然jq很简单,但是也有兼容问题,js基础是很重要的,jq的成功当时是因为ie6.7.8.9.10.chrom ...

  6. 模板内部不支持原生js的方法?》》artTemplate模版方法注册window全部事件方法

    我的模板中出现了: {{parseInt(hasshakenum)}} 结果报错: Template Error resultPageTMP Render Error parseInt is not ...

  7. 用原生JS实现AJAX和JSONP

    前端开发在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的.其实,原生 ...

  8. 【CSS进阶】原生JS getComputedStyle等方法解析

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

随机推荐

  1. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  2. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  3. September 23rd 2017 Week 38th Saturday

    Lonely people will always remember his life occurred in each person. 寂寞的人总是会用心记住他生命中出现过的每个人. If you ...

  4. September 10th 2017 Week 37th Sunday

    Dream most deep place, only then the smile is not tired. 梦的最深处,只有微笑不累. Everyday I expect I can go to ...

  5. I - Matches Game(异或运算符的使用)

    I - Matches Game Description Here is a simple game. In this game, there are several piles of matches ...

  6. LRU算法的精简实现(基于Java)

    LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高". impo ...

  7. 021.15 IO流 其他流

    IO包中的其他类操作基本数据类型:DataInputStream与DataOutputStream操作字节数组:ByteArrayInputStream与ByteArrayOutputStream操作 ...

  8. 【错误记录】flask mysql 死锁

    最近使用flask-sqlalchemy时,进行测试的时候发现日志中打印出了MySql死锁错误,查看Mysql日志发现是因为有俩条sql出现了死锁: Deadlock found when tryin ...

  9. python导入模块总结与分析

    定义1:python中什么是模块? 答:模块就是一个.py文件,每一个以py作为后缀的文件,都是一个模块. 定义2:Python中什么是包? 答:包是一类特殊的模块,他能包含其他模块,为了更好的组织模 ...

  10. mysql数据类型和使用方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011729265/article/details/25086957         MySQL支持 ...