jQuery:找到最接近的元素,不一定是父元素

mar*_*t1n 0 html jquery dom

我很清楚" closest()运行DOM树直到找到所提供的选择器匹配"的功能.但是,有没有办法让这个函数从定义的点搜索所有元素及其子元素?

<ul id="one" class="level-1">
  <li class="item-i">I</li>
  <li id="ii" class="item-ii">II
  <ul class="level-2">
    <li class="item-a">A</li>
    <li class="item-b">B
      <ul class="level-3">
        <li class="item-1">1</li>
        <li class="item-2">2</li>
        <li class="item-3">3</li>
      </ul>
    </li>
    <li class="item-c">C</li>
  </ul>
  </li>
  <li class="item-iii">III</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

如果我选择一个具有类的元素item-iii并且想要返回具有类的元素item-3,那么选择器会是什么样的?如果我理解closest()正确,它将在DOM树上运行但从不检查是否有任何元素具有与第二个选择器匹配的子元素.

ade*_*neo 5

搜索所有父.item-3元素,然后获取第一个(最接近的)元素,然后.item-3在具有这样元素的最近父元素中找到实际元素将是无效的,但可以这样做:

$(this).parents(':has(.item-3)').first().find('.item-3');
Run Code Online (Sandbox Code Playgroud)

小提琴

如果它只是在兄弟LI的内部,它可能会更有效率

$(this).siblings(':has(.item-3)').first().find('.item-3');
Run Code Online (Sandbox Code Playgroud)

小提琴

等等,越具体,越有效.

它甚至可以使用 closest();

$(this).closest(':has(.item-3)').find('.item-3');
Run Code Online (Sandbox Code Playgroud)

小提琴