用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 相关文章推荐
javscript对象原型的一些看法
Sep 19 Javascript
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
简洁Ajax函数处理(示例代码)
Nov 15 Javascript
js实现温度计时间样式代码分享
Aug 21 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
使用D3.js创建物流地图的示例代码
Jan 27 Javascript
微信小程序http连接访问解决方案的示例
Nov 05 Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
Vue 理解之白话 getter/setter详解
Apr 16 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
杏林同学录(六)
2006/10/09 PHP
几种显示数据的方法的比较
2006/10/09 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
javascript function、指针及内置对象
2009/02/19 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
vue-cli2.9.3 详细教程
2018/04/23 Javascript
Python中使用中文的方法
2011/02/19 Python
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python用match()函数爬数据方法详解
2019/07/23 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL