用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 相关文章推荐
JavaScript 克隆数组最简单的方法
Feb 12 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
全面了解javascript三元运算符
Jun 27 Javascript
javascript运算符语法全面概述
Jul 14 Javascript
jQuery弹出遮罩层效果完整示例
Sep 13 Javascript
jQuery检查元素存在性(推荐)
Sep 17 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
原生js实现验证码功能
Mar 16 Javascript
详解webpack之scss和postcss-loader的配置
Jan 09 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
Vue开发中遇到的跨域问题及解决方法
Feb 11 Javascript
深入解读VUE中的异步渲染的实现
Jun 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原理之异常机制
2010/08/21 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
Javascript倒计时代码
2010/08/12 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
javascript 回调函数详解
2014/11/11 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
Java面试题及答案
2012/09/08 面试题
MySQL面试题目集锦
2016/04/14 面试题
旅游个人求职信范文
2014/01/30 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
幸福终点站观后感
2015/06/04 职场文书
谢师宴学生致辞
2015/07/27 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers
mysql 排序失效
2022/05/20 MySQL