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>

LIchildred が class を持つタグのlevel2直後にある class を持つタグを選択するにはどうすればよいですか?LIselected

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);

または1行で:

$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 に答える