几个原生js方法总结
一、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方法总结的更多相关文章
- 原生js方法document.getElementsByClassName在ie8及其以下的兼容性问题
		
document.getElementsByClassName在ie8及其以下浏览器的兼容性问题,在ie8及其以下浏览器中不能使用,针对这个问题,下面给出详细的解决方法,感兴趣的朋友可以参考下 ...
 - 常用原生JS方法总结(兼容性写法)
		
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
 - HTML DOM对象的属性和方法介绍(原生JS方法)
		
HTML DOM对象的属性和方法介绍 DOM 是 Document Object Model(文档对象模型)的缩写. DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口), ...
 - 常用原生JS方法
		
备注:一下的方法都是包裹在一个EventUtil对象里面的,直接采用对象字面量定义方法了... ①添加事件方法 1 2 3 4 5 6 7 8 9 addHandler:function(elemen ...
 - jq 与原生js 方法互相转换
		
最近在用mui写页面,当然了在移动App里引入jq或zepto这些框架,肯定是极不理性的.虽然jq很简单,但是也有兼容问题,js基础是很重要的,jq的成功当时是因为ie6.7.8.9.10.chrom ...
 - 模板内部不支持原生js的方法?》》artTemplate模版方法注册window全部事件方法
		
我的模板中出现了: {{parseInt(hasshakenum)}} 结果报错: Template Error resultPageTMP Render Error parseInt is not ...
 - 用原生JS实现AJAX和JSONP
		
前端开发在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的.其实,原生 ...
 - 【CSS进阶】原生JS getComputedStyle等方法解析
		
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
 - 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
		
一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...
 
随机推荐
- UNIX高级环境编程(1)File I/O
			
引言: Unix系统中主要的文件操作包括: open read write lseek close unbuffered IO和standard I/O相对应,后面的章节我们会讨论这两者的区别. 在讨 ...
 - Http协议浅析
			
目录 Http协议浅析 http协议简介 http协议特性 http请求协议与响应协议 请求协议 响应协议 响应状态码 请求URI定位资源 HTTP方法 GET:获取资源 POST:传输实体主体 PU ...
 - SpringBoot部署流程
			
一. 项目介绍 a) 本项目为SpringBoot项目 b) 使用内置Tomcat容器 一. 操作步骤 a) 配置pom.xml文件,确定打包方式 b) 更改项目返 ...
 - linux 几个常用的Debian更新源
			
deb http://ftp.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.debian.org/debian/ ...
 - ubuntu常见问题排查
			
1. ubuntu recovery mode read-only 获取写的权限 1.1. 选择fsck check all file systems 进去直接选择YES就可以了 1.2. 选择roo ...
 - oc消息转发:forwardInvocation、签名、参量个数、SEL 相关测试
			
结论1.签名的参量类型伪造不正确会导致崩溃. 结论二.签名个数不对可能会导致参量丢失. 结论三:在签名配置正确的情况下,系统会将函数调用的所有信息打包到NSInvocation准备转发: - (voi ...
 - const修饰的成员是类成员,还是实例成员?
			
很抱歉,我以为只有static修饰的成员是类成员,可以通过类名直接访问,然而,const 修饰的成员也属于类成员,直接通过类名访问,不能通过实例变量访问. 做维护久了,深刻的理解,扎实的基础对写出高质 ...
 - Spring-IOC  MethodInvokingFactoryBean 类源码解析
			
MethodInvokingFactoryBean MethodInvokingFactoryBean的作用是,通过定义类和它的方法,然后生成的bean是这个方法的返回值,即可以注入方法返回值. Me ...
 - asp.net Web API简单的特性路由配置
			
一,控制器代码: [RoutePrefix("ajilisiwei")] //加URL前缀 (非必需) public class ShoppingController : ...
 - kendo ui - DropDownList 下拉列表系列
			
kendo-ui 官网:https://www.telerik.com/documentation 初始化 grid: 引入文件: <link rel="stylesheet" ...