为什么bt2不需要去重?

来源:4-4 DOM节点删除之保留数据的删除操作detach()

Jurchen

2016-09-01 10:06

求助:为什么bt2不需要去重?单击一次后,试过变量p中还有内容,但是再单击也不会再把p元素添加到页面?谢谢!

写回答 关注

5回答

  • 冥oo冥
    2016-10-27 18:20:27

    1.直接点击右边按钮,出现下面添加成功的,是因为内存中还有刚才detach()的p对象,这儿的重置代码没删除内存,所以会造成有这种情况,可以刷新右边页面,不用重置代码。
    正常的直接点击右边按钮,其实是执行$("body").append(undefined);,页面中没有添加任何元素

    2.#bt1为什么去重,当有p节点的时候才执行删除且保存到变量p中,没有p节点的时候,不执行删除且保存。
    如果不去重,即没有p节点的时候,执行删除且保存到变量p中,那右边按钮就是无效的了

    3.#bt2为什么不去重,append在是调用原生的appendChild。如果调用appendChild()将已存在文档中的一个节点再次插入,那个节点将自动从它当前的位置删除并在新的位置重新插入:没有必要显式删除该节点。


    qq_感谢永...

    终于看到答案了,上面那些人答的都是什么乱七八糟的,不会就不要强答好吗

    2016-11-15 11:37:28

    共 1 条回复 >

  • html2015
    2016-09-23 17:37:56

    因为bt2不是删除,即使多次点击不会丢失数据,但如果是bt1没有去重,连续点击会连续响应,数据会丢失,即使后面点击bt2也无法找回了。

  • 慕仰3473226
    2016-09-14 10:55:35

    其实,bt2也应该去重的;不然你先点击bt2下面又会出现p元素;

      $("#bt2").click(function() {
            if ($("p").length) return; //去重,(只有P元素不出现时才append)
            //把p元素在添加到页面中
            //事件还是存在
            $("body").append(p);
        });


  • 慕粉3498277
    2016-09-11 13:06:54

    有同样的困惑,弄懂了一部分,还是没完全懂。以下是我的一些理解:

    加了一行代码:

    $("#bt2").click(function() {

        console.log(p);

            $("body").append( p);

        });

    在浏览器中调试运行发现,再次单击btn2时,console.log(p)是执行了的,而且运行到$("body").append( p);这一句时没有报错,而是顺利地运行了,只是页面没有变化。

    所以,此时内存中应该还是有p的,而且每次btn2的点击事件都执行了,只是 语句$("body").append( p);没有得出我们所想的结果,问题应该在这,但我也还没找到原因,希望有大神能解答~

  • 微笑0113428131
    2016-09-01 11:19:19

    p元素存在的话就执行detach,没有的话就不执行,btn2,只有执行过detach才能执行,不然内存中没有p的模型对象,所以不需要去重。

    Jurche...

    你好,谢谢你的回复,但我还是有一些疑问。第一步,单击btn1,把p的模型对象放入内存中;第二步,单击btn2,把内存中的变量p添加到页面中。问题来了,如果这时候再单击btn2,这时候的效果是不会再把p添加到页面了,但是我没明白,这时候会执行什么操作,内存中还有没有p的模型对象?谢谢

    2016-09-01 12:38:52

    共 1 条回复 >

jQuery基础(二)—DOM篇

jQuery第二阶段开启DOM修炼,了解创建、插入、删除与替换

114004 学习 · 614 问题

查看课程

相似问题