用JavaScript来包装文本元素节点
2014-09-06 12:20
190 查看
原文链接: Wrapping Text Nodes and Elements with JavaScript原文日期: 2014-09-04翻译日期: 2014-09-06翻译人员: 铁锚
当你的应用需要依赖某个特定的JavaScript类库时,你无意中总会试图解决某些类库自身的问题,而不是语言的问题。就比如当我试图将文本(可能也包含HTML元素)用一个DIV元素包起来时。假设有以下HTML:
这时候如果想把它转换为下面这样:
最简单暴力的方法是,你可以在父元素上通过 .innerHTML 属性来执行更新,但问题是这样一来所有绑定的事件监听都会失效,因为使用 innerHTML 时会重新创建一个HTML元素。这真是个大玻璃杯!所以这时候只能利用JavaScript来实现 —— 尺有所短、寸有所长。下面是实现代码:
这里不能使用for循环,因为 childNodes 是一个动态节点组成的集合,只要移动节点就会影响到他的index索引值。我们用while循环一直检测父元素的 firstChild ,如果其返回一个代表 false 的值, 那么你就知道所有的节点都已经移到新的parent中了!
当你的应用需要依赖某个特定的JavaScript类库时,你无意中总会试图解决某些类库自身的问题,而不是语言的问题。就比如当我试图将文本(可能也包含HTML元素)用一个DIV元素包起来时。假设有以下HTML:
This is some text and <a href="">a link</a>.
这时候如果想把它转换为下面这样:
<div>This is some text and <a href="">a link</a>.<div>
最简单暴力的方法是,你可以在父元素上通过 .innerHTML 属性来执行更新,但问题是这样一来所有绑定的事件监听都会失效,因为使用 innerHTML 时会重新创建一个HTML元素。这真是个大玻璃杯!所以这时候只能利用JavaScript来实现 —— 尺有所短、寸有所长。下面是实现代码:
var newWrapper = document.createElement('div'); while(existingParent.firstChild) { // 移动DOM元素,不会创建新元素 newWrapper.appendChild(existingParent.firstChild); }
这里不能使用for循环,因为 childNodes 是一个动态节点组成的集合,只要移动节点就会影响到他的index索引值。我们用while循环一直检测父元素的 firstChild ,如果其返回一个代表 false 的值, 那么你就知道所有的节点都已经移到新的parent中了!
相关文章推荐
- 用JavaScript实现用一个DIV来包装文本元素节点
- 用JavaScript实现用一个DIV来包装文本元素节点
- 初探JavaScript(一)——也谈元素节点、属性节点、文本节点
- JavaScript中操作有些DOM时关于文本节点和元素节点的问题。
- JavaScript DOM 如何区分元素节点、属性节点和文本节点?
- 初探JavaScript(一)——也谈元素节点、属性节点、文本节点
- javascript FF下因换行空白引起的第一个节点元素和IE不一致的解决方法~
- javascript dom操作之cloneNode文本节点克隆使用技巧
- javascript入门·表单和表单元素二 (文本相关,按钮,单、复选按钮)
- JavaScript获取HTML DOM节点元素的方法的总结
- DOM中元素节点、属性节点、文本节点的理解
- javascript获取元素文本内容的通用函数
- JavaScript获取HTML DOM节点元素的方法的总结
- JavaScript获取HTML DOM节点元素详解
- javascript获取HTML DOM节点元素的方法的总结
- JavaScript获取HTML DOM节点元素的方法的总结
- JavaScript动态删除节点、文本
- 书:"Pro JavaScript Techniques 精通JavaScript"之取得元素文本内容的通用函数
- JavaScript获取HTML DOM节点元素的方法的总结