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创建自己的插件(自定义插件)的方法
Jun 10 Javascript
js函数中onmousedown和onclick的区别和联系探讨
May 19 Javascript
javascript常用对话框小集
Sep 13 Javascript
javascript中字符串拼接详解
Sep 26 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
vue-dialog的弹出层组件
May 25 Javascript
JS仿淘宝搜索框用户输入事件的实现
Jun 19 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
JS中call和apply函数用法实例分析
Jun 20 Javascript
Vue.js中该如何自己维护路由跳转记录
May 19 Javascript
JS实现页面跳转与刷新的方法汇总
Aug 30 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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
如何做到多笔资料的同步
2006/10/09 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
理解javascript回调函数
2014/12/28 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
Django实现图片文字同时提交的方法
2015/05/26 Python
Python正则表达式指南 推荐
2018/10/09 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
阿巴庭院:Abba Patio
2019/06/18 全球购物
SQL数据库笔试题
2016/03/08 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
会计求职自荐信
2014/06/20 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
考博导师推荐信范文
2015/03/27 职场文书
大学生实习介绍信
2015/05/05 职场文书
元旦主持词开场白
2015/05/29 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技