jQuery选择最接近元素的子元素

时间:2013-05-24 19:15:50

标签: javascript jquery

基本上我希望能够从子level4 div中选择div level2 parent。我的应用程序没有这样的类,否则我只选择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 个答案:

答案 0 :(得分:3)

这个怎么样: -

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

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

答案 1 :(得分:3)

您需要.has()方法

  

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

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

See fiddle for example.

答案 2 :(得分:0)

使用.filter()

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

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

答案 3 :(得分: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