jQuery: Thêm hai thuộc tính thông qua .attr (); phương pháp


104

BIÊN TẬP:

Tôi biết được rằng sử dụng giá trị khác _blank, KHÔNG hoạt động trên trình duyệt di động để mở các cửa sổ / tab mới.

Ví dụ: nếu bạn cần mở một cửa sổ / tab mới:

  • Này hoạt động trên tất cả các trình duyệt, ngay cả các trình duyệt di động: target="_blank".

  • Này không hoạt động trên các trình duyệt di động, nhưng nó không làm việc trên các trình duyệt máy tính để bàn: target="new".

-

Mặc dù tôi có cách này đang hoạt động, nhưng tôi không chắc liệu có cách nào tốt hơn để thực hiện nó hay không, hoặc liệu cách tôi làm có phải là cách duy nhất / đúng hay không.

Về cơ bản những gì tôi đang làm là thay thế tất cả các giá trị target="_new"hoặc target="_blank"thuộc tính thành target="nw", theo cách này chỉ một cửa sổ mới được mở và trong đó tất cả các cửa sổ mới khác sẽ mở để không làm người dùng choáng ngợp với nhiều cửa sổ.

Tôi cũng đang thêm thuộc tính " Mở trong cửa sổ mới " title="".

Vì vậy, giải pháp tôi đã tạo là giải pháp này:

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

Lưu ý hai .attr();phương pháp.

Đây có phải là cách chính xác để thêm hai thuộc tính vào một phần tử không?

Tôi đã thử .attr('target','nw','title','Opens in a new window')nhưng nó không hoạt động.

Lý do tôi hỏi là vì nguyên tắc DYR (Không lặp lại bản thân), vì vậy nếu tôi có thể cải thiện mã mà tôi có, tuyệt vời, nếu không, thì nó là như thế.

Cảm ơn.


@zzzzBov, vâng, bạn nói đúng, cảm ơn bạn đã cung cấp thông tin.
Ricardo Zea

Tôi muốn đặt hai thuộc tính để có cùng một giá trị nên rất tiếc là .attr('a,b','value')không hoạt động. Tôi cũng đã ổn định .attr('a',1).attr('b',1). Là ít phụ thuộc vào cửa sổ mới có thể là cách tiếp cận khác, trong trường hợp của bạn, tuy nhiên, @ricardozea: P
Alastair

Câu trả lời:


228

Nên làm việc:

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

Ghi chú :

" Khi đặt nhiều thuộc tính, dấu ngoặc kép xung quanh tên thuộc tính là tùy chọn.

CẢNH BÁO : Khi đặt thuộc tính 'class', bạn phải luôn sử dụng dấu ngoặc kép!

Từ tài liệu jQuery (tháng 9 năm 2016) cho .attr :

Cố gắng thay đổi thuộc tính type trên một phần tử đầu vào hoặc nút được tạo qua document.createElement () sẽ tạo ra một ngoại lệ trên Internet Explorer 8 trở lên.

Chỉnh sửa :
Để tham khảo trong tương lai ... Để có được một thuộc tính duy nhất, bạn sẽ sử dụng

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

Để đặt một thuộc tính duy nhất, bạn sẽ sử dụng

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

Để đặt nhiều thuộc tính, bạn cần bao bọc mọi thứ trong {...}

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

Chỉnh sửa - Nếu bạn đang cố gắng lấy / đặt thuộc tính 'đã kiểm tra' từ hộp kiểm ...

Bạn sẽ cần sử dụng prop() jQuery 1.6+

phương thức .prop () cung cấp một cách để truy xuất các giá trị thuộc tính một cách rõ ràng, trong khi .attr () truy xuất các thuộc tính.

... khái niệm quan trọng nhất cần nhớ về thuộc tính đã kiểm tra là nó không tương ứng với thuộc tính đã kiểm tra. Thuộc tính thực sự tương ứng với thuộc tính defaultChecked và chỉ nên được sử dụng để đặt giá trị ban đầu của hộp kiểm. Giá trị thuộc tính đã kiểm tra không thay đổi theo trạng thái của hộp kiểm, trong khi thuộc tính đã kiểm tra

Vì vậy, để có được trạng thái đã chọn của hộp kiểm, bạn nên sử dụng:

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

Hoặc để đặt hộp kiểm là đã chọn hoặc đã bỏ chọn, bạn nên sử dụng:

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

1
Aha! Ok, đây là những gì tôi đã đề cập đến. Cảm ơn vì lời giải thích, đó là lý do tại sao tôi chọn câu trả lời của bạn thay vì câu trả lời của Derek. Cảm ơn Adam. Tái bút. Tôi sẽ chấp nhận câu trả lời của bạn sau 7 phút, nó không cho phép tôi chấp nhận nó ngay bây giờ.
Ricardo Zea

Sửa chữa: bạn có thể thay đổi thuộc tính type trong IE nếu phần tử mới được tạo và chưa được thêm vào DOM.
Akash Kava

Để đặt nhiều thuộc tính, bạn cần phải gói mọi thứ trong {...} ... Các khóa không cần phải nằm trong dấu ngoặc kép?
Gcamara14 28/12/19

27

cách thích hợp là:

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

9

Nếu bạn thêm các thuộc tính bootstrap trong thẻ neo động hơn thì điều này sẽ giúp bạn rất nhiều

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

2

Một cái gì đó như thế này:

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

1

Sử dụng dấu ngoặc nhọn và đặt tất cả các thuộc tính bạn muốn thêm vào bên trong

Thí dụ:

$('#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"},
];

Cảm ơn vì đã trả lời. Bạn có thể vui lòng giải thích mã của bạn hoặc thêm một bản demo của nó hoạt động hay không?
Ricardo Zea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.