假设我有一个包含许多列的宽表,并且我想添加colspan=2
:
td#2, td#10, td#15
td#3, td#11, td#16
我是否必须专门这样做:
$("table td").eq(2).attr('colspan','2')
$("table td").eq(10).attr('colspan','2')
$("table td").eq(15).attr('colspan','2')
还是我应该使用filter()
?
有没有更短的方法?
假设我有一个包含许多列的宽表,并且我想添加colspan=2
:
td#2, td#10, td#15
td#3, td#11, td#16
我是否必须专门这样做:
$("table td").eq(2).attr('colspan','2')
$("table td").eq(10).attr('colspan','2')
$("table td").eq(15).attr('colspan','2')
还是我应该使用filter()
?
有没有更短的方法?
你可以做:
$("td:eq(2), td:eq(10), td:eq(15)", "table").prop('colspan',2);
是我认为最短的方法。
你可以做
$('table').find('td:eq(2), td:eq(10), td:eq(15)').prop('colspan', 2);
(我会使用.prop()
而不是.attr()
我想,但我需要确保:-)(编辑是的,它是一个真实的财产)
请注意,上述方法可行,但那些 jQuery 扩展搜索限定符之类:eq()
的可能会减慢选择过程。仅选择单元格后使用单独的过滤步骤可能会更快。
另请注意,该选择(如您的原始代码)会在整个 table 中找到第 2、第 10 和第 15 个单元格。如果您想设置每行第 2、10 和 15 个单元格的属性,您可能需要一些不同的东西。
$("table td").filter(':eq(2), :eq(10), :eq(15)').attr('colspan',2);
作为多个选择器的替代方案,您可以调用带有函数的attr()形式并编写:
$("table td").attr("colspan", function(index) {
return index == 2 || index == 10 || index == 15 ? "2" : undefined;
});
(在这里也可以很好地使用prop(),因为它的 setter 形式也支持获取函数,并且colspan
属性直接映射到同名的 DOM 属性。)
您可以如下优化您的代码。与其跳入 DOM 并搜索$("table td")
3 次,不如将它缓存到一个变量中并使用它。
var td = $("table td");
td.eq(2).attr('colspan',2);
td.eq(10).attr('colspan',2);
td.eq(15).attr('colspan',2);
否则你可以做类似的事情
$("td:eq(2), td:eq(10), td:eq(15)", "table").attr('colspan',2);
别的
$("table").filter('td:eq(2), td:eq(10), td:eq(15)').attr('colspan',2);