用JavaScript实现用一个DIV来包装文本元素节点


Posted in Javascript onSeptember 09, 2014

当你的应用需要依赖某个特定的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 相关文章推荐
Prototype1.5 rc2版指南最后一篇之Position
Jan 10 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
深入理解JavaScript中的并行处理
Sep 22 Javascript
Centos7 中 Node.js安装简单方法
Nov 02 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
vue2单元测试环境搭建
May 24 Javascript
vue中动态设置meta标签和title标签的方法
Jul 11 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
vscode 调试 node.js的方法步骤
Sep 15 Javascript
Javascript confirm多种使用方法解析
Sep 25 Javascript
微信小程序APP的生命周期及页面的生命周期
Apr 19 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 #Javascript
js 数组去重的四种实用方法
Sep 09 #Javascript
jQuery源码分析之jQuery中的循环技巧详解
Sep 06 #Javascript
10分钟学会写Jquery插件实例教程
Sep 06 #Javascript
页面加载完后自动执行一个方法的js代码
Sep 06 #Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 #Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
Sep 06 #Javascript
You might like
php discuz 主题表和回帖表的设计
2009/03/13 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
PHP实现微信对账单处理
2018/10/01 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python3 xpath和requests应用详解
2020/03/06 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
销售人员个人求职信
2013/09/26 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
现场施工员岗位职责
2015/04/11 职场文书
2015年防汛工作总结
2015/05/15 职场文书