使用jQuery选择器获取一系列表单元格
我试图编写一个jQuery选择器来选择一系列表单元格(minRow,minCol)到(maxRow,maxCol) 我有一个选择器,用于水平范围(第1列,第2行)到(第3列,第2行)使用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)').
$('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');