在jQuery中,如何在具有某些类的元素之间选择元素?

dan*_*007 18 jquery

我有一个无序列表.

<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>
Run Code Online (Sandbox Code Playgroud)

如何使用jQuery在类foo和bar的列表项之间选择列表项?我不知道任何列表项的内容.我也不知道有多少列表项被选中,所以我不能依靠计数.

dot*_*joe 28

$('li.foo').nextUntil('li.bar')
Run Code Online (Sandbox Code Playgroud)

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

  • 我完全不知道这存在 (4认同)
  • 谢谢!fyi,你可以使用`$('li.foo').nextUntil('li.bar').css('background','#f00');`而不是使用"attr"方法.:d (2认同)

gdo*_*ica 12

var $elements = $('.bar').prevUntil('.foo');
Run Code Online (Sandbox Code Playgroud)

或者另一种方式:

var $elements = $('.foo').nextUntil('.bar');
Run Code Online (Sandbox Code Playgroud)

演示


如果您有兴趣知道它是如何实现的,请查看源代码:

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;
},?
Run Code Online (Sandbox Code Playgroud)