请老司机帮忙看一下,下面代码目的是将若干元素重复插入到一个容器中,似乎不太灵。
1、插入的多个元素为什么只显示2个?
2、后插入的p2,为什么反而在p1前面?
谢谢您的解答,3Q感谢。
<body>
<div id="box-wrap">
<h1>这是h1</h1>
</div>
<script src="js/jquery-2.1.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var p1 = $("<div class='box'>p1</div>");
var p2 = $("<div class='box'>p2</div>");
//▲准备两个元素,稍后插入到容器中。
//▼开始插入到容器中,但为什么这么多,只插入了2个?
$("#box-wrap").append(p1);
$("#box-wrap").append(p2);
$("#box-wrap").append(p1);
$("#box-wrap").append(p1);
$("#box-wrap").append(p1);
</script>
</body>
因为你这样写,已经创建了dom对象了,jq框架中封装的append方法是这样的:
框架中是通过appendChild来操作dom的,appendChild的作用是什么呢?请看w3c解答,它里面也提到可以将元素从一个元素移动到另一个元素,说白了,就是剪切的意思。因此你后面写的不是不起作用,而是在原地移动,因为就一个对象,你再怎么写也是一个。
如果想要添加多个元素,怎么操作呢?有两个方法:
1.直接将数据源放在append方法里面,这样的话,每次调用append方法都会重新生成dom对象
2.使用克隆节点(深度克隆)
最后,至于顺序不一样,是因为你append(p2),后面又调用append(p1)了,所以就剪切了,再添加进去咯!