18

順序付けられていないリストがあります。

<ul>
    <li class="foo">Baz</li>
    <li>Select Me!</li>
    <li>Select Me!</li>
    <li>Select Me!</li>
    <li class="bar">Baz</li>
    <li>Don't Select Me</li>
    <li>Red Herring List Item</li>
</ul>

jQueryを使用して、クラスfooとbarを持つリスト項目の間のリスト項目を選択するにはどうすればよいですか? どのリスト項目の内容もわかりません。また、選択するリスト項目の数がわからないため、カウントに依存することはできません。

4

4 に答える 4

28
$('li.foo').nextUntil('li.bar')

http://jsfiddle.net/zZRDB/1/

于 2012-05-14T20:40:12.797 に答える
12
var $elements = $('.bar').prevUntil('.foo');

または他の方法:

var $elements = $('.foo').nextUntil('.bar');

デモ


それがどのように実装されているかを知りたい場合は、ソースコードをチェックしてください

nextUntil: function(elem, i, until) {
    return jQuery.dir(elem, "nextSibling", until);
},
prevUntil: function(elem, i, until) {
    return jQuery.dir(elem, "previousSibling", until);
},​

dir: function(elem, dir, until) {
    var matched = [],
        cur = elem[dir];

    while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) {
        if (cur.nodeType === 1) {
            matched.push(cur);
        }
        cur = cur[dir];
    }
    return matched;
},​
于 2012-05-14T20:40:46.787 に答える
2

試す、

 $('li.bar').prevUntil('.foo')

デモ

于 2012-05-14T20:41:04.027 に答える
2
var index1 = $('li.foo').index(),
    index2 = $('li.bar').index()-1;

    $('li:gt('+ index1+'):lt('+ index2+')', 'ul');

また$('li.foo').nextUntil('li.bar');

また$('li.bar').prevUntil('li.foo');

于 2012-05-14T20:41:25.890 に答える