3

鉴于此标记:

<ul>
    <li><a class="level1 selected">1</a></li>
    <li><a class="level2">2</a></li>
    <li><a class="level2">3</a></li>
    <li><a class="level2">4</a></li>
    <li><a class="level1">1</a></li>
    <li><a class="level2">5</a></li>
    <li><a class="level2">6</a></li>
    <li><a class="level2">7</a></li>
    <li><a class="level1">1</a></li>
</ul>

如何选择其子LI项具有类level2的标签紧跟在LI其子项具有类的标签之后selected

我的初始代码失败,因为我无法正确使用 nextUntil() 函数。

// Selects the parent of the select A tag    
var selectedParent = $("ul li a.selected.level1").parents("li");

selectedParent.nextUntil("li a.level1").each(function () {
    $(this).children().addClass("on");
});
4

2 回答 2

3
$lvl1 = $('a:not(.level2)').closest('li');
$lvl2 = $('a.selected').closest('li').nextUntil($lvl1);

或单行:

$lvl2 = $('a.selected').closest('li').nextUntil($('a:not(.level2)').closest('li'));

http://jsfiddle.net/mblase75/jKCrH/

于 2013-01-18T17:24:25.093 回答
1

您可以为此创建一个自定义函数,而不是使用复杂的选择器(这将遍历 jQuery 中的太多对象)。我认为这会更有效率。在这里尝试演示

$.fn.nextTillList1 = function () {
    return this.each(function () {
        var $item = $(this).next("li");
        while($item.find(".level1").length <= 0) {
            $item.children().addClass("on");
            $item = $item.next("li");
        }
    });
};

// Selects the parent of the select A tag    
var selectedParent = $("ul li a.selected.level1").parents("li");

// Call custom function
selectedParent.nextTillList1();
于 2013-01-18T17:29:35.327 回答