代码之家  ›  专栏  ›  技术社区  ›  fmsf

如何检查jquery中的一个元素是否在另一个元素中?

  •  29
  • fmsf  · 技术社区  · 15 年前

    javascript或jquery中是否有直接的方法来检查元素是否在另一个元素中。

    我不是指 $(this).parent 因为我希望找到的元素可以是元素树中较低的随机数步。

    例如,我想检查 < div id="THIS DIV"> 将在 < div id="THIS PARENT"> :

    <div id="THIS_PARENT">
     <div id="random">
      <div id="random">
       <div id="random">
        <div id="THIS_DIV">
    (... close all divs ...)
    

    所以在伪代码中:

     if($("div#THIS_DIV").isWithin("div#THIS_PARENT")) ...
    

    如果没有任何直接的方法,我可能会为此做一个函数,但仍然值得问。

    2 回复  |  直到 11 年前
        1
  •  48
  •   Paolo Bergantino    15 年前

    你可以这样做:

    if($('#THIS_DIV','#THIS_PARENT').length == 1) {
    
    }
    

    通过 specifying a context 对于搜索(第二个参数),我们基本上是说“查找ID为的元素” #THIS_DIV 在ID为的元素中 #THIS_PARENT “。这是使用jquery执行此操作的最简洁的方法。

    我们也可以这样写,用 find ,如果对您更有意义:

    if($('#THIS_PARENT').find('#THIS_DIV').length == 1) {
    
    }
    

    或者像这样,使用 parents ,如果要从子级向上搜索:

    if($('#THIS_DIV').parents('#THIS_PARENT').length == 1) {
    
    }    
    

    任何一个都可以。这个 length 需要位来确保“搜索”的长度为>0。我当然会亲自推荐你和第一个一起去,因为它是最简单的。

    另外,如果您通过ID引用一个元素,则不需要(当然完全可以)在选择器前面加上标记名。但就速度而言,它并没有真正的帮助,因为jquery将使用本机 getElementById() 内部的。使用标记名只有在按类选择时才重要,如 div.myclass 比…快得多 .myclass 只要 <div> 元素将具有特定的类。

        2
  •  18
  •   TLindig    11 年前

    使用jquery>=1.4(2010),您可以使用非常快速的功能 jQuery.contains()

    此静态方法与dom元素一起使用,而不是与jquery元素和返回一起使用 true false .

    jQuery.contains( container, descendant )
    

    示例:要检查文档中是否有元素,可以执行以下操作:

    jQuery.contains( document.body, myElement )