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

Javascript jQuery选择最近元素的子元素,javascript,jquery,Javascript,Jquery,基本上,我希望能够从子级别4 div中选择div level2父级。我的应用程序没有此类类,否则我只选择level2: <div class="level1"> <div class="level2"> <div class="level3"> <div class="level4"></div> </div> </div> <div class="level2"&g

基本上,我希望能够从子级别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>
另一种看待我想说的话的方式是;从中间开始,在可见元素外面找到一个元素。

这个如何:-< /p>
$('#start').parentsUntil(':visible').last();
这将为您提供所有隐藏的父div,直到其可见父div和最后一个div将提供最外层的父div。last不是位置选择器,它是集合中的最后一个。

您想要该方法吗

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

使用:


也适用于选择几乎任何东西。

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

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

不,在本例中,我想要level1的子级,但我想要包含id=start的子级。而且,这些类根本不存在,所以我根本不能按类搜索,它们只是用来帮助解释这个问题。这不一定会给他一个原始元素的祖先。这就是他想要的吗?这个问题一点也不清楚。事实上,我看不到OP状态在任何地方,他们想选择哪个元素。你是对的,不清楚。但他确实在评论中的3个代码示例的最后一行中提到了这一点。然后他的问题就毫无意义了。如果他想选择id=start的元素,他所需要做的就是写$'start'。首先选择任何父母有什么意义?他需要能够找到$'start'的任何一个祖先div是第一个可见祖先的直系后代。这也不一定会给他一个原始元素的祖先Sure。嵌套元素的数量和顺序可能会发生变化,因此基于索引或位置的选择是不可靠的。他需要能够找到哪个祖先div是第一个可见祖先的直系后代。@顺便说一句,ogc nick最后一个不是位置这里最后一个是匹配集合中的最后一个。这意味着最外面的一个。我相信这正是我需要的。它在我的初始测试和您的JSFIDLE中起作用。谢谢你上次的澄清,这让我有点怀疑。我会完成测试,然后接受it@Graham当然这就是为什么我更新了我的答案,并做了更多的澄清,因为猜测:@ogc nick被弄糊涂了:元素上的最后一个选择器和集合上的最后一个选择器。我正在尝试构建一段通用代码,添加类会使它更容易,但我必须记住,在我的所有项目中都要这样做。我喜欢这样的想法,即它只工作而不必膨胀htmlQuestions声明可以有任意数量的嵌套元素,因此按索引选择它们不会得到他需要的结果。Graham,你能澄清你的问题吗?显示您实际尝试使用的代码,而不显示虚构的类名,并准确说明您正试图完成的任务。这样我们就能给你更好的答案。啊,我明白了。我误读了你的密码,谢谢你的帮忙。投票赞成。
$('#start').closest(':visible').children().has('#start');
$('#start').closest(':visible').children().filter(':first-child')
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