js有关元素内容操作小结


Posted in Javascript onDecember 20, 2011

1.innerHTML
这个大家一定都很熟悉,可读可写,修改元素内容相当快捷方便,在兼容问题上可以参考W3Help中一个知识记录。

2.outerHTML
此方法可以用于对元素自身的快速替换,比如:

<p id="hello">Hello, I am a demo</p> 
$('hello').outerHTML = '<p>Hello, I am a replacement</p>';

遗憾的是,firefox目前还不支持(我当前用firefox8),其他浏览器支持的还不错,在ff中可以用innerHTML来模拟实现。

3.documentFragment
DocumentFragment能实现高效率的DOM节点插入操作,我们可以新建一个DocumentFragment。

var docFragment = document.createDocumentFragment();

它支持元素节点的appendChild方法,可以利用它进行追加节点,相当于内存中的一个临时空间, 然后一次性加入DOM Tree中,较少浏览器相关的reflow和repaint事件,在之前的博文中有提到。

4.insertAdjacentHTML
这个方法很有意思,是IE4最先引入的,目前也写入了HTML5标准,目前所有浏览器都支持,ff是8才刚开始支持的。 它能够实现在元素的里外,共4个地方灵活的添加内容,例如:

<!-- beforebegin --><p id="test"><!-- afterbegin -->hello, I am a demo.<!-- beforeend--></p><!-- afterend--> 
$('test').insertAdjacentHTML('beforebegin', /* your content here */);

这确实很cool不是么,但遗憾的是,IE自己引入,确在IE6~8的版本中存在不少bug,比如我测试中遇到如果元素是div的话, 能够在四个地方,都能顺利插入内容,这是我们所预期的,但是我换成p元素的话,‘beforebegin'和‘afterend'就会报错, 它变得只支持p外部的内容插入,不允许插入到p的内部,还有tr,td不支持此方法等各种bug。IE9测下来,表现预期。 关于这个方法jQuery之父,有篇博客有讲,感兴趣的可以稍微参考下http://ejohn.org/blog/dom-insertadjacenthtml/

5.textContent
这个是针对元素中的文本内容的操作,提取元素本身和其子元素中文本内容,这个用的频率不是很高,但还是要知道下, 比如:

<div id="test"><p>whatever, blah blah.</p>hello,I am a <em>Demo</em></div> 
$('test').textContent //whatever, blah blah.hello, I am a Demo

把文本直接连接起来。IE9+和其他浏览器都很好的支持此方法。

6.innerText
这个也是由IE最初引入的,除了firefox,目前其他浏览器也都支持,但是结果有些微妙的不同。在opera中,结果和textContent一致,在chrome中,与包含该文本元素的样式有关。在IE9中,与包含该文本元素的样式有关。 事实上,innerText和textContent看似差不多,但还是有一些值得注意的不同之处。 具体MDN上有一定的说明:

1.textContent能够获取script,style元素中得文本。innerText不行

2.innerText结果跟样式有关,不能获取隐藏元素的文本内容,textContent则不受限制

3.innerText会触发浏览器内部的reflow事件,而textContent不会,这个对效率有点影响。

当然对于IE6~8,我们可以比较容易地通过遍历节点来实现textContent的效果。如犀牛书中所给出的解决方法:

function textContent(e) { 
var child, type, s = []; // s holds the text of all children 
for(child = e.firstChild; child != null; child = child.nextSibling) { 
type = child.nodeType; 
if(type === 3 || type === 4) { //Text and CDATASection nodes 
s.push(child.nodeValue); 
} else if(type === 1) { 
s.push(textContent(child)); 
} 
return s.join(''); 
} 
}
Javascript 相关文章推荐
jQuery 验证插件 Web前端设计模式(asp.net)
Oct 17 Javascript
js实现单一html页面两套css切换代码
Apr 11 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
javascript内置对象操作详解
Feb 04 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
js匿名函数使用&amp;传参(实例)
Sep 08 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
详解vue的diff算法原理
May 20 Javascript
vue使用原生swiper代码实例
Feb 05 Javascript
详解JavaScript 的执行机制
Sep 18 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
Dec 20 #Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
Dec 20 #Javascript
js change,propertychange,input事件小议
Dec 20 #Javascript
JavaScript面向对象设计二 构造函数模式
Dec 20 #Javascript
Javascript面向对象设计一 工厂模式
Dec 20 #Javascript
用JavaScript仿PS里的羽化效果代码
Dec 20 #Javascript
javascript判断iphone/android手机横竖屏模式的函数
Dec 20 #Javascript
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
一个oracle+PHP的查询的例子
2006/10/09 PHP
用PHP实现多级树型菜单
2006/10/09 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
javascript 动态加载 css 方法总结
2009/07/11 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
javascript几个易错点记录
2014/11/26 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
js实现简易计算器功能
2019/10/18 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
对Python中的@classmethod用法详解
2018/04/21 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
给物业的表扬信
2014/01/21 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
Python 阶乘详解
2021/10/05 Python