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 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
JavaScript对象学习经验整理
Oct 12 Javascript
js正则匹配出所有图片及图片地址src的方法
Jun 08 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
jQuery插件WebUploader实现文件上传
Nov 07 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
React入门教程之Hello World以及环境搭建详解
Jul 11 Javascript
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
vue.js  父向子组件传参的实例代码
Oct 29 Javascript
解决vue-cli + webpack 新建项目出错的问题
Mar 20 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 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获取服务器信息的实现代码
2013/02/04 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
javascript变量声明实例分析
2015/04/25 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python和shell变量互相传递的几种方法
2013/11/20 Python
Python深入学习之内存管理
2014/08/31 Python
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python闭包实现计数器的方法
2015/05/05 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
python中类的属性和方法介绍
2018/11/27 Python
利用python开发app实战的方法
2019/07/09 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
勤俭节约倡议书
2014/04/14 职场文书
2014年小学工作总结
2014/11/26 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
诚信考试主题班会
2015/08/17 职场文书
调解协议书范本
2016/03/21 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
nginx配置之并发频次限制
2022/04/18 Servers