3

假设我有一个包含许多列的宽表,并且我想添加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()

有没有更短的方法?

4

5 回答 5

6

你可以做:

$("td:eq(2), td:eq(10), td:eq(15)", "table").prop('colspan',2);

是我认为最短的方法。

于 2013-01-27T16:12:35.167 回答
4

你可以做

$('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 个单元格的属性,您可能需要一些不同的东西。

于 2013-01-27T16:11:48.513 回答
3
$("table td").filter(':eq(2), :eq(10), :eq(15)').attr('colspan',2);
于 2013-01-27T16:13:20.737 回答
1

作为多个选择器的替代方案,您可以调用带有函数的attr()形式并编写:

$("table td").attr("colspan", function(index) {
    return index == 2 || index == 10 || index == 15 ? "2" : undefined;
});

(在这里也可以很好地使用prop(),因为它的 setter 形式也支持获取函数,并且colspan属性直接映射到同名的 DOM 属性。)

于 2013-01-27T16:17:02.263 回答
0

您可以如下优化您的代码。与其跳入 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);
于 2013-01-27T16:13:58.553 回答