使用jQuery将属性添加到指定元素的任何更短的方法?

时间:2013-01-27 16:08:56

标签: javascript jquery

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

有没有更短的路?

5 个答案:

答案 0 :(得分:6)

你可以这样做:

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

我认为是最短的方式。

答案 1 :(得分:4)

你可以做到

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

(我认为我会使用.prop()代替.attr(),但我需要确保:-)(编辑是的,这是一个不动产)

请注意,上述方法可行,但那些jQuery扩展搜索限定符(如:eq())可能会降低选择过程的速度。在仅选择单元格后使用单独的过滤步骤可能会更快。

另请注意,该选择(如原始代码)会在整个表格中找到第2个,第10个和第15个单元格 。如果你想在每一行上设置第2,第10和第15个单元格的属性,你可能想要不同的东西。

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分: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);