Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测jQuery对象是否在页面上_Jquery_Dom - Fatal编程技术网

检测jQuery对象是否在页面上

检测jQuery对象是否在页面上,jquery,dom,Jquery,Dom,给定一个jQuery对象,$j,我需要知道它代表的是已经在页面上的内容,还是还没有放到页面上的内容。例如,如果我有: $j = $('#id-of-something-already-on-the-page'); $j = $("<p>I'll cook you some eggs, Margie.</p>"); 或 $j=$(“煎饼屋在哪里?”)。附录($(“#这已经在那里”); 然后我有一些东西在页面上,我不需要把它放在页面上。但是,如果我有这个: $j = $

给定一个jQuery对象,
$j
,我需要知道它代表的是已经在页面上的内容,还是还没有放到页面上的内容。例如,如果我有:

$j = $('#id-of-something-already-on-the-page');
$j = $("<p>I'll cook you some eggs, Margie.</p>");

$j=$(“煎饼屋在哪里?

”)。附录($(“#这已经在那里”);
然后我有一些东西在页面上,我不需要把它放在页面上。但是,如果我有这个:

$j = $('#id-of-something-already-on-the-page');
$j = $("<p>I'll cook you some eggs, Margie.</p>");
$j=$(“我给你煮些鸡蛋,玛吉。

”);
然后我需要在它出现在页面上之前添加它

问题是你如何询问$j是否在页面上?我非常了解两种工作方式:

  • 查看它是否有父项:
    $j.parent().length>0
    表示它在页面上
  • 查看它是否有有效的索引:
    $j.index()>-1
    表示它在页面上
  • 如果
    $j
    html
    或者可能是
    body
    ,我可以看到第一个失败;我很高兴忽略这两个病理病例。我想不出第二种方法会失败


    是否有一种标准的技术来询问jQuery对象是否在页面上?我不在乎
    $j
    是否可见。

    jQuery对象表示html元素的集合

    选择后:$j=$(“#页面上已有内容的id”)


    你所要做的就是检查$j.length。如果是一个,则页面上有一个项目。

    我可能只是检查元素是否可以到达body元素:

    $j.closest('body').size()>0
    
    正如您在其他评论中所指出的,在处理额外的主体元素的一些特殊情况下,这将失败。如果您真的想检测这些情况,我想您可以检查是否有多个$(
    body
    )元素,但我怀疑这种极端情况会很快失控

    此“可能已附加到页面”检查也可以提交到:


    就我个人而言,我会从您知道的页面中的元素开始,比如
    ,然后使用:

    这甚至适用于你提到的两个病理病例。检查
    .length
    而不是
    .size()
    。也没有理由检查返回的值是否为
    >0
    length
    属性将始终是一个非负整数,因此检查值的真实性就足够了。

    使用jQuery(至少在1.7.1版中)
    $('html')。parent()
    返回一个非空数组(
    [#document]
    ):

    $j=$(“我给你煮些鸡蛋,玛吉。

    ”); $j.parent().length==0 $('html').parent().length==1 $('body').parent().length==1
    因此,“mu太短”的注释不是问题:

    如果$j是html或者可能是body,我可以看到第一个失败;我很高兴忽略这两个病理病例。我想不出第二种方法会失败


    $j可能有一个父项,而不在您知道的文档中……另一个可能的测试:
    $j.closest('body').size()>0
    @drachensten:很好。提问最好的部分是让某人指出明显的问题。同样的问题可能也适用于索引方法,因为他们正在检查类似的东西。@Michael:“超级家长”方法可能会遇到与在某些病理情况下只检查
    $j.parent().length
    相同的问题,不是吗?奥托,如果有人想把一具尸体放进一具尸体里,他们可能会受到一些痛苦。哦,我的上帝,穆问了第二个问题!:不是真的。如果我分离节点并将其存储在变量中,它仍然作为变量存在。如果我稍后测试该变量,看看是否有代码将其重新插入DOM(考虑:每次传递引用而不是对其进行重新筛选,并使用分支语句执行各种操作,如分离或包装),那么它可能在DOM中,也可能不在DOM中。如果在编写函数时将引用传递给节点,则无法始终知道id是什么。还有:上下文查询。或者如果我有
    $j=$(“我会给你煮一些鸡蛋,玛吉。

    ”)
    那么
    $j.length==1
    但是在我
    $('body')之前,段落不会出现在页面上。附加($j)
    (或类似的东西)我以前使用过
    $.expr
    ,但现在我只需要在一个地方使用它,所以我不认为我需要这样的想法。然而,@Michael@mu为什么不
    closest('html')
    ?当你可以只使用
    .length
    时,为什么要使用
    .size()>0
    @马特:我用
    .length
    ,我想我从来没有用过
    .size()。然而,它可能不值得额外的击键,特别是当大多数javascript程序员没有它就会理解它的意义时。我有一点担心这在大页面上的重量。但是+1,肯定是火。
    
    if ($('html').has($j).length)
    {
        // $j is in the page
    }
    
    $j = $("<p>I'll cook you some eggs, Margie.</p>");
    $j.parent().length === 0
    $('html').parent().length === 1
    $('body').parent().length === 1