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

时间:2012-10-22 15:09:06

标签: jquery

修改

我了解到使用除_blank之外的其他值,不能在移动浏览器上使用以打开新的窗口/标签。

例如,如果您需要打开一个新窗口/标签:

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

  • 这在移动浏览器上无效,但在桌面浏览器上运行target="new"

-

虽然我有这个工作,但我不确定是否有更好的方法,或者我得到它的方式是正确/唯一的方式。

基本上我正在做的是将所有target="_new"target="_blank"属性值替换为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(不要重复自己)原则,所以如果我可以改进我拥有的代码,那么很好,如果没有,那么它就是它。

感谢。

5 个答案:

答案 0 :(得分:210)

应该工作:

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

注意

  

设置多个属性时,属性名称旁边的引号是可选的。

     

警告 :设置'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" } );

编辑 - 如果您尝试从复选框中获取/设置'已检查'属性...

您需要使用prop() as of jQuery 1.6+

  

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

     

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

因此,要获得复选框的获取已检查状态,您应该使用:

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

或者将复选框设置为选中或取消选中,您应该使用:

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

答案 1 :(得分:26)

正确的方法是:

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

答案 2 :(得分:2)

这样的事情:

$(myObj).attr({"data-test-1": num1, "data-test-2": num2});

答案 3 :(得分:1)

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

示例:

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

答案 4 :(得分: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"},
];