有没有办法可以使用jQuery一次在多个元素上设置属性?

时间:2012-07-23 05:05:57

标签: jquery

我需要做以下事情:

    $("#deleteLink").attr('data-row', $(this).attr('id'));
    $("#editLink").attr('data-row', $(this).attr('id'));
    $("#deleteLink").attr('data-href', '/Admin/Contents/Delete' + params);
    $("#editLink").attr('data-href', '/Admin/Contents/Edit' + params);

有没有办法可以将这些变量的设置与jQuery结合起来。

2 个答案:

答案 0 :(得分:0)

$("#deleteLink,#editLink").each(function(){
    $(this).attr('data-row', this.id);
    $(this).attr('data-href', '/Admin/Contents/'+this.id.substr(1).split("Link")[0] + params);
  });

OR use.data()

$("#deleteLink,#editLink").each(function(){
    $(this).data('row',this.id);
    $(this).data('href', '/Admin/Contents/'+this.id.substr(1).split("Link")[0] + params);
  });

答案 1 :(得分:0)

您的问题并未明确this您使用$(this).attr("id")的位置。如果它是一些其他元素,因为,例如,你显示的四行是在其他元素的点击处理程序或其他内容中,那么在我看来,这是最有效和易读的方法是这样的:

$("#deleteLink").attr({'data-row' : this.id,
                       'data-href' : '/Admin/Contents/Delete' + params});
$("#editLink").attr({'data-row' : this.id,
                     'data-href' : '/Admin/Contents/Edit' + params});

也就是说,使用.attr()的语法允许您传入一个映射以同时在同一元素上设置多个属性值,但是一次一个地执行一个链接元素,因为它们将具有不同的{{ 1}}值设置。

但是,这实际上并没有回答你关于一次设置多个元素属性的问题,你可以这样做:

data-href

第一行创建一个包含两个链接元素的jQuery对象,并使用$("#deleteLink,#editLink").attr('data-row', this.id) .attr('data-href', function(i,a) { var action = this.id.split("Link")[0]; return '/Admin/Contents/' + action.charAt(0).toUpperCase() + action.substr(1) + params; }); 将它们设置为具有相同的.attr('data-row', this.id)属性,等于data-row保持的值。 (我仍然认为this.id是其他元素。)

第二行this的另一次调用(为了避免再次调用.attr()函数再次选择相同的元素),这次使用语法传递回调函数的$() - 为正在处理的每个元素调用此函数,其中函数.attr()中的元素是被修改的元素,属性设置为您返回的任何元素。

More info about the .attr() method here.