jQuery:使用closest(),find()和children()获得特殊父级的同级

时间:2018-06-22 11:14:53

标签: jquery html css find parent-child

我遇到了一个问题,如何使用.closest,.find和其他可能的jQuery方法查找URL。该页面的结构为:

(x^4 -3x^2 + 4)/(x-2) = x^3 + 2x^2 + x + 2 with a remainder of 8.

您会看到许多内部列表。 我需要找到ul.good li的href值。问题是,如果我使用close()找到ul.good,我无法找到确切的li,它是 this 的父级,我从这里“移到”了ul.good。 / p>

因此,问题是如何从a <-this获得/ findme值。有可能吗?

需要澄清的是,href / findme在ul.good中是第一级。

a <-这要深得多(级别未知)。

谢谢。

2 个答案:

答案 0 :(得分:1)

一种可能的方法是首先收集li的所有ul.good个孩子:

$goodUl = $this.closest('ul.good');
$lis = $goodUl.children();

...然后将其用作closest参数:

$liParentOfThis = $this.closest($lis);

这将为您提供育儿$li,然后发现a应该很简单:

$a = $liParentOfThis.children('a');

这很简洁,但是效率不高,因为您需要两次上链。您可以通过循环使其更快:

$check = $this; 
while (($check = $check.parent().closest('ul')).length) {
  if ($check.is('.good')) break; // already went up too far
  $a = $check.prev('a');
  if ($a.length) break; // found it 
}

在每个步骤中,您都寻找下一个最接近的ul(因为从元素本身开始进行.closest查找,所以父元素是必需的),并检查它是否具有先前的同级a需要。如果是这样,则搜索完成。

答案 1 :(得分:0)

这是一个简单的解决方案。希望这对您有用:)

$("#here").on("click",function(){
   alert($(this).parents("ul.good").find("> li > a").attr("href"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <ul>
    <ul class="good">
      <li>something</li>
      <li>something</li>
      <li>
        <a href="/findme">findme</a>
      </li>
    <ul>
    <ul>
      <li>
        <a href="#" id="here">I am here</a>
      </li>
      </ul>
      </ul>
    </ul>
  </ul>
</ul>