问答详情
源自:4-4 DOM节点删除之保留数据的删除操作detach()

不是有两个p元素吗,那么$("p").length返回不应该是2吗?怎么是0呢?不是很懂啊

下面是别人家的例子:

length属性的返回值是Number类型,返回该jQuery对象封装的DOM元素的个数。

如果该对象是一个空的jQuery对象,没有封装任何元素,则返回0。

示例&说明

以下面这段HTML代码为例:

<div id="n1">
    <div id="n2">
        <ul id="n3">
            <li id="n4">item1</li>
            <li id="n5">item2</li>
            <li id="n6">item3</li>
        </ul>
    </div>  
</div>

我们编写如下jQuery代码:

var j_li = $("ul li");
document.writeln( j_li.length ); // 3

var j_p = $("p"); // 没有p元素,返回空的jQuery对象
document.writeln( j_p.length ); // 0


提问者:赞美太阳1123 2018-07-24 10:44

个回答

  • 风起临冬
    2018-08-18 12:56:27

    if那句话意思是,如果p没有长度了,那么函数不进行操作,如果有长度,就临时删除p。防止你重复删除。

  • qq_陈虹林_0
    2018-07-24 17:02:27

    !是非的意思

    这一步是避免重复detach,重复操作下面一步恢复就不行了

  • 赞美太阳1123
    2018-07-24 11:32:44

    <body>

        <p>P元素1,默认给绑定一个点击事件</p>

        <p>P元素2,默认给绑定一个点击事件</p>

        <button id="bt1">点击删除 p 元素</button>

        <button id="bt2">点击移动 p 元素</button>

        <script type="text/javascript">

        $('p').click(function(e) {

            alert(e.target.innerHTML)

        })

        var p;

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

            if (!$("p").length) return; //去重

            //通过detach方法删除元素

            //只是页面不可见,但是这个节点还是保存在内存中

            //数据与事件都不会丢失

            p = $("p").detach()

        });

    那么到底这里面的$("p").length返回几啊~

  • qq_陈虹林_0
    2018-07-24 11:01:31

     $("p")是指p元素,代码中没有p元素啊,返回肯定是0。