2

基本上我希望能够从子级别 4 div 中选择 div level2 父级。我的应用程序没有这样的类,否则我只会选择 level2 :)

<div class="level1">
  <div class="level2">
    <div class="level3">
      <div class="level4"></div>
    </div>
  </div>
  <div class="level2"> <!-- this is hidden -->
    <div class="level3">
      <div id="start" class="level4"></div>
    </div>
  </div>
</div>

我从第一个可见的父级开始$('#start')并搜索,但我没有看到返回该父级的子级的方法。在父母内部搜索$('#start')似乎非常浪费,因为我从一个子孩子开始。

$('#start').closest(':visible') // returns level1
$('#start').closest(':visible').first() // returns the first level2. I can't just use second because the number of level2s can change.
$('#start').closest(':visible').children().each(function(){ /* do some search to check it contains `$('#start')` }) // seems very wasteful.

另一种看待我想说的话的方法是;从中间开始,找到外部(可见元素),然后将一个元素移入。

4

4 回答 4

3

这个怎么样:-

$('#start').parentsUntil(':visible').last();

这将为您提供所有隐藏的父 div,直到其可见父级和 last() 将给出隐藏的最外层父级。last 不是位置上的选择器,它是集合中的 last()。

于 2013-05-24T19:22:38.693 回答
3

你想要.has()方法

描述:将匹配元素集减少为具有与选择器或 DOM 元素匹配的后代的元素。

$('#start').closest(':visible').children().has('#start');

例如,参见小提琴。

于 2013-05-24T19:22:47.683 回答
0

使用.filter()

$('#start').closest(':visible').children().filter(':first-child')

.find()也适合选择几乎任何东西。

于 2013-05-24T19:22:54.963 回答
0

你说这些类不存在......为什么不添加它们?这将使想法更容易找到。类名不需要关联实际的样式。

var allLevel4 = $('#start').closest(':visible').find('.level4');
var firstLevel4 = $('#start').closest(':visible').find('.level4')[0];
var secondLevel4 = $('#start').closest(':visible').find('.level4')[1]; //also, #start
于 2013-05-24T19:27:47.123 回答