javascript - $.append(元素)不能重复插入元素,何解?
PHP中文网
PHP中文网 2017-04-11 09:59:36
[JavaScript讨论组]

请老司机帮忙看一下,下面代码目的是将若干元素重复插入到一个容器中,似乎不太灵。
1、插入的多个元素为什么只显示2个?
2、后插入的p2,为什么反而在p1前面?

谢谢您的解答,3Q感谢。

    <body>
        <p id="box-wrap">
            <h1>这是h1</h1>
        </p>
        <script src="js/jquery-2.1.0.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var p1 = $("<p class='box'>p1</p>");
            var p2 = $("<p class='box'>p2</p>");
            //▲准备两个元素,稍后插入到容器中。
            //▼开始插入到容器中,但为什么这么多,只插入了2个?
            $("#box-wrap").append(p1);
            $("#box-wrap").append(p2);
            $("#box-wrap").append(p1);
            $("#box-wrap").append(p1);
            $("#box-wrap").append(p1);
        </script>
    </body>
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
PHPz
  var p1 = $("<p class='box'>p1</p>");
 var p2 = $("<p class='box'>p2</p>");

因为你这样写,已经创建了dom对象了,jq框架中封装的append方法是这样的:

    append: function() {
        return this.domManip( arguments, function( elem ) {
            if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
                var target = manipulationTarget( this, elem );
                target.appendChild( elem );
            }
        });
    }

框架中是通过appendChild来操作dom的,appendChild的作用是什么呢?请看w3c解答,它里面也提到可以将元素从一个元素移动到另一个元素,说白了,就是剪切的意思。因此你后面写的不是不起作用,而是在原地移动,因为就一个对象,你再怎么写也是一个。
如果想要添加多个元素,怎么操作呢?有两个方法:
1.直接将数据源放在append方法里面,这样的话,每次调用append方法都会重新生成dom对象

      $("#box-wrap").append("<p class='box'>p2</p>");

2.使用克隆节点(深度克隆)

         var p1 = $("<p class='box'>p1</p>")[0];//需要转为dom对象哦
            var p2 = $("<p class='box'>p2</p>");
            var p3 = p1.cloneNode(true);
            $("#box-wrap").append(p1);
            $("#box-wrap").append(p2);
            $("#box-wrap").append(p3);

最后,至于顺序不一样,是因为你append(p2),后面又调用append(p1)了,所以就剪切了,再添加进去咯!

ringa_lee

为什么要将p1,p2包装成jquery对象呢
直接这么写就行了

 var p1 = "<p class='box'>p1</p>";
 var p2 = "<p class='box'>p2</p>";
ringa_lee

P1和p2就是两个对象啊!
如果你想多次插入P1和P2,需要使用clone;

p1 = $("<p></p>")
container = $(""#box-wrap"")
n1 = p1.clone().prependTo(container);
n2 = p1.clone().prependTo(container);
n3 = p1.clone().prependTo(container);
n4 = p2.clone().prependTo(container);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号