2

使用以下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>

我将外部 ul 存储在变量中

var acc = $("#accordion")[0]  

在一般情况下,我只是传递了 DOM 元素,不一定指定选择器

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

例如 var items = $(">li", acc);

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

$(this).closest(">li", acc);

返回一个空的 jQuery(可能是一个错误?尽管在这种情况下很难定义“>”的含义,其中顶级元素是动态的)

$(this).parents(">li")

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

有没有办法做我想做的事?

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

4

4 回答 4

2

怎么样$(h3).closest(".item");?根据“最近”文档,它将从当前节点向上遍历 DOM,直到找到与您的选择器匹配的节点。

于 2011-02-25T14:51:51.133 回答
1

反之,保证子关系:

acc.children('li').has(this);
于 2011-02-25T15:21:38.247 回答
0
jQuery(this).parents('li:last');
于 2011-02-25T16:07:59.437 回答
0
$(">li",acc).has(this)

一般工作;在初始 jQuery 上设置上下文似乎是唯一在 jQuery 中使用“>”启动选择器的地方

于 2011-02-26T08:48:08.080 回答