使用jQuery选择器获取一系列表单元格

使用jQuery选择器获取一系列表单元格,jquery,jquery-selectors,Jquery,Jquery Selectors,我试图编写一个jQuery选择器来选择一系列表单元格(minRow,minCol)到(maxRow,maxCol) 我有一个选择器,用于水平范围(第1列,第2行)到(第3列,第2行) $('tr:lt(3):gt(1)td:lt(4):gt(0))) 但对于相应的垂直范围(第2列,第1行)到(第2列,第3行) $('tr:lt(4):gt(0)td:lt(3):gt(1) 因为td选择器不会在该行上循环,所以只会使用第一个选择器 此版本使用地图和每个作品 $('tr:lt(4):gt(0)').

我试图编写一个jQuery选择器来选择一系列表单元格(minRow,minCol)到(maxRow,maxCol)

我有一个选择器,用于水平范围(第1列,第2行)到(第3列,第2行)
$('tr:lt(3):gt(1)td:lt(4):gt(0)))

但对于相应的垂直范围(第2列,第1行)到(第2列,第3行)
$('tr:lt(4):gt(0)td:lt(3):gt(1)

因为td选择器不会在该行上循环,所以只会使用第一个选择器

此版本使用地图和每个作品
$('tr:lt(4):gt(0)').map(function(){return$(this).find('td:lt(3):gt(1)}).each(function(){/*this.do\u something*/})
但更丑陋

有没有一个优雅的方法来实现这一点

找到比
:lt():gt()

上述水平和垂直范围以及块范围的示例在此小提琴上

选择器
tr:lt(3):gt(1)td:lt(4):gt(0)
仅在选中一行时起作用。现在发生的是
tr:lt(3):gt(1)
将返回第3行中的一组
td
元素,
td:lt(4):gt(0)
将根据该特定集合中的索引选择第二、第三和第四个
td
元素

当您使用类似于
tr:lt(4):gt(0)td:lt(3):gt(1)
的选择器时,会选择多行,并且选择器相对于返回的集合(而不是每个单独的
td
元素)进行复合。选择器
tr:lt(4):gt(0)
返回由第二行、第三行和第四行组成的集合。基于此返回集,选择器
td:lt(3):gt(1)
将根据其在该特定集中的索引选择第三个
td
元素

换句话说,
:gt()
/
:lt()
选择器将选择匹配集中大于或小于索引的所有元素。您的选择器未按预期工作,因为正在根据匹配集(而不是每个单独的
td
元素)选择元素

解决方案是在
tr:lt(4):gt(0)
/
td:lt(3):gt(1)
之间链接
.find()
方法

换言之,替换:

$('table#2 tr:lt(4):gt(0) td:lt(3):gt(1)').addClass('red');
$('table#2 tr:lt(4):gt(0) td:lt(3):gt(1)').addClass('red');
与:


由于您需要一种组合
:lt():gt()
的替代方法,因此值得指出的是,您可以使用
.slice()
方法:

例如,您可以替换:

与:


太好了,谢谢。我注意到切片只在第一个tr选择器上工作。这不起作用:
$('table#4tr').slice(1,4)。find('td')。slice(1,4)。addClass('yellow')
$('table#2 tr:lt(4):gt(0) td:lt(3):gt(1)').addClass('red');
$('table#2 tr').slice(1, 4).find('td:lt(3):gt(1)').addClass('red');