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 相关文章推荐
JS getStyle获取最终样式函数代码
Apr 01 Javascript
浅析JavaScript中的CSS属性及命名规范
Nov 28 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
May 14 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
jQuery使用animate创建动画用法实例
Aug 07 Javascript
Jquery和JS获取ul中li标签的实现方法
Jun 02 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
Mar 09 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
微信小程序非跳转式组件授权登录的方法示例
May 22 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 Javascript
详解vue 组件注册
Nov 20 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
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
JS分页效果示例
2013/10/11 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
python实现的简单抽奖系统实例
2015/05/22 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
使用python爬取B站千万级数据
2018/06/08 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
法国足球商店:Footcenter
2019/07/06 全球购物
毕业生优秀推荐信
2013/11/26 职场文书
小学生考试获奖感言
2014/01/30 职场文书
高考励志标语
2014/06/05 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL