jQuery:通过.attr()添加两个属性;方法


104

编辑:

我了解到,使用以外的值_blank无法在移动浏览器上打开新的窗口/标签。

例如,如果您需要打开一个新的窗口/选项卡:

  • 这适用于所有浏览器,甚至移动浏览器:target="_blank"

  • 这不适用于移动浏览器,但适用于桌面浏览器:target="new"

-

尽管我正在做这件事,但是我不确定是否有更好的方法可以做到这一点,或者我所获得的方法是否是正确/唯一的方法。

基本上,我正在做的是将所有target="_new"or或target="_blank"attribute值替换为target="nw",这样仅打开一个新窗口,并在其中打开所有其他新窗口,以免用户被多个窗口淹没。

我还添加了“ 在新窗口中打开title=""属性。

所以我创建的解决方案是这样的:

$("a[target='_blank'], a[target='_new']").attr('target','nw').attr('title','Opens in a new window');

注意这两种.attr();方法。

这是向元素添加两个属性的正确方法吗?

我试过了,.attr('target','nw','title','Opens in a new window')但是没有用。

我问的原因是由于DYR(不要重复自己)原理,所以如果我可以改进自己拥有的代码,那么很好,如果没有,那么它就是它。

谢谢。


@zzzzBov,是的,您是对的,感谢您的信息。
里卡多·泽

我想将两个属性设置为具有相同的值,所以不好意思.attr('a,b','value')。我.attr('a',1).attr('b',1)也选择了。不过,就您而言,减少对新窗口的依赖可能是另一种方法,@ricardozea:P
Alastair

Answers:


228

应该管用:

.attr({
    target:"nw", 
    title:"Opens in a new window",
    "data-value":"internal link" // attributes which contain dash(-) should be covered in quotes.
});

注意事项

当设置多个属性,周围的属性名称的引号是可选的。

警告:设置“ class”属性时,必须始终使用引号!

.attr的jQuery文档(2016年9月)中:

尝试更改通过document.createElement()创建的输入或按​​钮元素的type属性,将在Internet Explorer 8或更早版本上引发异常。

编辑
供将来参考...要使用单个属性,请使用

var strAttribute = $(".something").attr("title");

设置单个属性,您将使用

$(".something").attr("title","Test");

设置多个属性,您需要将所有内容包装在{...}中

$(".something").attr( { title:"Test", alt:"Test2" } );

编辑-如果您试图从复选框中获取/设置'checked'属性...

从jQuery 1.6开始,您将需要使用prop()

.prop()方法提供一种显式检索属性值的方法,而.attr()检索属性。

...要记住有关选中属性的最重要概念是它与选中属性不对应。该属性实际上对应于defaultChecked属性,并且仅应用于设置复选框的初始值。选中的属性值不会随着复选框的状态而更改,而选中的属性会更改

因此,要获取复选框的选中状态,应使用:

$('#checkbox1').prop('checked'); // Returns true/false

将复选框设置为选中或未选中,您应使用:

$('#checkbox1').prop('checked', true); // To check it
$('#checkbox1').prop('checked', false); // To uncheck it

1
啊哈!好的,这就是我所指的。感谢您的解释,这就是为什么我选择您的答案而不是德里克的原因。谢谢亚当。PS。我会在7分钟内接受您的回答,但现在不让我接受。
里卡多·泽

更正:如果元素是新创建的但尚未添加到DOM,则可以在IE中更改type属性。
Akash Kava

要设置多个属性,您需要将所有内容包装在{...} ...中,键是否需要用引号引起来?
Gcamara14

27

正确的方法是:

.attr({target:'nw', title:'Opens in a new window'})

9

如果您要在锚标记中动态添加引导程序属性,那么这将对您有所帮助

 $(".dropdown a").attr({
      class: "dropdown-toggle",
     'data-toggle': "dropdown",
      role: "button",
     'aria-haspopup': "true",
     'aria-expanded': "true"
});


1

使用大括号并将要添加的所有属性放入其中

例:

$('#objId').attr({
    target: 'nw',
    title: 'Opens in a new window'
});

0
Multiple Attribute

var tag = "tag name";
createNode(tag, target, attribute);

createNode: function(tag, target, attribute){
    var tag = jQuery("<" + tag + ">");
    jQuery.each(attribute, function(i,v){
        tag.attr(v);
    });
    target.append(tag);
    tag.appendTo(target);
}
var attribute = [
    {"data-level": "3"},
];

感谢您的回复。您能解释一下您的代码或添加一个演示示例吗?
里卡多·泽
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.