Javascript 查找与上下文相关(而不仅仅包含在上下文中)的最近父级

Javascript 查找与上下文相关(而不仅仅包含在上下文中)的最近父级,javascript,jquery,dom,ancestor,Javascript,Jquery,Dom,Ancestor,使用以下html <ul id="accordion"> <li> <ul> <li><h3>title</h3></li> </ul> </li> <li> <ul> <li><h3>title</h3><

使用以下html

<ul id="accordion">
    <li>
        <ul>
            <li><h3>title</h3></li>
        </ul>
    </li>
    <li>
        <ul>
            <li><h3>title</h3></li>
        </ul>
    </li>
    <li>
        <ul>
            <li><h3>title</h3></li>
        </ul>
    </li>       
</ul>
在一般情况下,我只是被传递了DOM元素,不一定能指定选择器

当h3被点击时,我想得到包含它的顶级li在一般情况下,手风琴ul和要获取的元素I wnat之间,以及要获取的元素和h3之间可能存在任何类型的标记。。。但我将拥有一个选择器,它允许我使用“>”选择器从手风琴获取元素

e、 g.var项目=$(“>li”,acc)

问题是,当我从单击的h3(“单击处理程序中的this”)开始时,很难找到特定的项目

$(this).closest(">li", acc);
返回一个空的jQuery(可能是一个bug?尽管在这个实例中很难定义“>”的含义,因为顶级元素是动态的)

不允许设置上下文,因此可能返回太多元素

有没有办法做我想做的事


*编辑:html现在使问题更清楚了

那么
$(h3)如何呢?根据“最近的”文档,它将从当前节点向上遍历DOM,直到找到与选择器匹配的节点。

换一种方式,以保证子关系:

acc.children('li').has(this);

一般工程;在初始jQuery上设置上下文似乎是在jQuery中启动带“>”的选择器的唯一地方,这应该是所有必要的-在这种情况下“>”限定符是错误的,尤其是在没有任何内容的情况下。但是如果我的标记是

title

,则将返回p而不是div(我在exmaple中使用的标记有点做作,但是使用>非常有用的一个实际示例是使用嵌套的ul和li元素)很好的解决方案,但遗憾的是,它在acc之外遍历dom,以便在其中找到一个元素acc@wheresrhys,感谢您的提示-我刚刚想到了另一种方法,请参阅更新。甚至更好!我认为通常的问题是选择器可能包含“>”,但不一定包含“>”(我正在编写一个相当通用的手风琴插件),因此还需要在选择器上使用正则表达式来检查是否使用您的方法或最近的(),如果使用您的方法,则需要进一步分析选择器(例如“>li.target”)把它的一部分从选择器的其余部分中分离出来……我认为所有真正应该在jQuery中的工作,除非发现(“>li”)与childern(“li”)做的一样?@wheresrhys这是与委托一起使用的一个很好的观点。目前,您可能只需要使用筛选函数,因为它是最灵活的。但是当>li作为子元素包含li元素时,这将不起作用
$(this).parents(">li")
acc.children('li').has(this);
jQuery(this).parents('li:last');
$(">li",acc).has(this)