jQuery nextUntil()在结束标记处停止

jQuery nextUntil()在结束标记处停止,jquery,dom,select,Jquery,Dom,Select,我试图获取前两个类“selected”之间的所有td元素。并将文本颜色更改为绿色。我一直在使用nextUntil,但我面临的问题是,当出现新的时,它不会抓取那些td元素。有没有一种方法可以使用nextUntil忽略任何标记?谢谢 jQuery: var firstDate = $('table.jCalendar tbody').find($('td.selected')[0]); var secondDate = $('table.jCalendar tbody').find($('td.se

我试图获取前两个类“selected”之间的所有td元素。并将文本颜色更改为绿色。我一直在使用nextUntil,但我面临的问题是,当出现新的
时,它不会抓取那些td元素。有没有一种方法可以使用nextUntil忽略任何
标记?谢谢

jQuery:

var firstDate = $('table.jCalendar tbody').find($('td.selected')[0]);
var secondDate = $('table.jCalendar tbody').find($('td.selected')[1]);
$(firstDate).nextUntil(secondDate).css("color", "green");
HTML:


18
19
20
21
22
23
24
25
26
27
28
29
30
31

因此,为了澄清,我希望td元素的文本20到26被选中,但21到24只被选中。有时,在所选类别的td标记之间有不止一组
标记。

不太可能;这就是
nextUntil
的设计方法。您需要创建一个
每个
循环,该循环按顺序运行于所有
标记中:

var color_it = false;
$('table.jCalendar tbody').find('td').each(function() {
    var $this = $(this);
    if $this.is(firstDate) {
        color_it = true;
    };
    if $this.is(secondDate) {
        color_it = false;
    };
    if (color_it) {
        $this.css("color", "green");
    };
});

值得一提的是,您还可以用
标记替换表格单元格,这些标记具有
显示:表格单元格附加样式。那他们就都是兄弟姐妹了。然而,.

我的理解是突出显示每个TD,而不管所选的两个类之间的行

我使用类更改而不是内联CSS,因为用一行代码就可以更容易地删除后续选择

演示:

其他较短版本: 演示:


在这种方法中,您可以选择所有单元格,并过滤掉选择前后的单元格

var selectStart = false;
$('table.jCalendar td').not(function() {
    if ($(this).hasClass('selected')) {
        selectStart = !selectStart;
    }
    return !selectStart;
}).css({color:'green'});​

.nextUntil(
仅检查
同级
25,26
不是第一个
的同级。选定的
。它们是否总是以相同数量的td连续排列在行中?如果需要调整,使绿色类不会与选定类冲突,只需调整slice()中的两个索引变量即可
var firstRow = $('td.selected:first').parent()
var secondRow = $('td.selected:last').parent();

$('tr').slice(firstRow.index() + 1, secondRow.index()).find('td').addClass('green')

firstRow.find('.selected').nextAll().andSelf().addClass('green')
secondRow.find('.selected').prevAll().andSelf().addClass('green')
var $cells = $('tbody td'),
    idx_1 = $cells.index($('td.selected:first')),
    idx_2 = $cells.index($('td.selected:last'));

$cells.slice(idx_1, idx_2 + 1).addClass('green');
var selectStart = false;
$('table.jCalendar td').not(function() {
    if ($(this).hasClass('selected')) {
        selectStart = !selectStart;
    }
    return !selectStart;
}).css({color:'green'});​