JS中appendChild追加子节点无效的解决方法


Posted in Javascript onOctober 14, 2018

JS中appendChild追加子节点无效

有这么一段代码:

let divs = document.getElementsByClassName('test');
let btn = document.createElement('div');

for(let i=0;i<divs.length;i++){
 divs[i].appendChild(btn);
}

表面上这段代码为每个 class属性为 test的元素添加一个 div子元素。

看起来没有什么问题,但是执行完之后却发现子元素并没有成功添加,也没有报错。

这其实是因为一个元素只能有一个父元素,上面这段代码试图将 btn添加到多个元素中。

而这与一个元素只能有一个父元素相矛盾,自然就添加不了。

解决办法也很简单,就是将 btn的声明语句放到循环里面去,这样每次添加的 btn都是不同的元素,自然也就没有上面的问题了。

代码如下:

let divs = document.getElementsByClassName('test');

for(let i=0;i<divs.length;i++){
 let btn = document.createElement('div');
 divs[i].appendChild(btn);
}

附:JS原生追加子节点

var fragment = document.createDocumentFragment();
li = document.createElement('li');
li.className = "xxx";
fragment.appendChild(li); 
document.getElementById("xx").appendChild(fragment);

如上,需要先原生创建节点,节点内容成为了document的一部分才能appendchild,

如果直接  appendchild(“<div></div>”)是不可以的,

因为appendChild(Node)这个 方法一般是在指定元素节点的最后一个子节点之后添加节点 

但如果Node是页面中的DOM对象,那么就不是添加节点了,就是直接Move节点。 

appendChild你可以理解为移动一个元素。如果想复制一份过去,要事先clone 

但是不管怎样,这个node需要先存在,

append()前面是要选择的对象,后面是要在对象内插入的元素内容 

appendTo()前面是要插入的元素内容且为Jquery对象,而后面是要选择的对象 

实例: 

$('#a').append('content'); 
$('<div>content</div>').appendTo($('#a')); 

//注意appendTo前面一定要是Jquery对象。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript中的property和attribute介绍
Dec 26 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
学习JavaScript鼠标响应事件
Dec 25 Javascript
js操作cookie保存浏览记录的方法
Dec 25 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
vue编译打包本地查看index文件的方法
Feb 23 Javascript
vue 获取及修改store.js里的公共变量实例
Nov 06 Javascript
Vue实现简单计算器案例
Feb 25 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 Javascript
详解ES6 Symbol 的用途
Oct 14 #Javascript
javascript实现文本框标签验证的实例代码
Oct 14 #Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 #Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 #Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 #Javascript
详解webpack loader和plugin编写
Oct 12 #Javascript
深入理解Angularjs 脏值检测
Oct 12 #Javascript
You might like
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
angularJS开发注意事项
2018/05/26 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python自动登录QQ的实现示例
2020/08/28 Python
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
linux面试题参考答案(7)
2012/10/29 面试题
电子商务专业个人的自我评价
2013/12/19 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
优秀党支部申报材料
2014/12/24 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
捐书活动倡议书
2015/04/27 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
党员干部学习心得体会
2016/01/23 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书