用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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
js removeChild 障眼法 可能出现的错误
Oct 06 Javascript
jQuery老黄历完整实现方法
Jan 16 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
Javascript实现倒计时时差效果
May 18 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
Jun 20 Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
微信小程序实现录音功能
Nov 22 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
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
python封装对象实现时间效果
2020/04/23 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
如何使用python进行pdf文件分割
2019/11/11 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
python cookie反爬处理的实现
2020/11/01 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
美工的岗位职责
2013/11/14 职场文书
小学教师岗位职责
2013/11/25 职场文书
会计核算科岗位职责
2014/03/19 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
品质标语大全
2014/06/21 职场文书
群众路线领导对照材料
2014/08/23 职场文书
开展创先争优活动总结
2014/08/28 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
爱国主义电影观后感
2015/06/18 职场文书
关爱空巢老人感想
2015/08/11 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL