Như Sarfraz đã chỉ ra, cách chính xác để đặt thuộc tính cho đối tượng bộ chọn jquery là sử dụng attr("attrName", "attrVal")
. Lý do mà setAttribute
không hoạt động là điều đáng để giải thích, vì tôi đã đánh đầu vào điểm này nhiều lần:
Khi bạn sử dụng cú pháp chọn của jquery, nó trả về một đối tượng - được định nghĩa trong jquery - - về cơ bản là danh sách tất cả các yếu tố mà bộ chọn phù hợp. Cho dù nó khớp với một phần tử (luôn luôn là trường hợp với bộ chọn id) hay nhiều hơn một đối tượng trả về là danh sách phần tử, không bao giờ là một đối tượng DOM đơn lẻ (ví dụ như phần tử đơn). setAttribute
là một phương pháp cho các đối tượng thực tế HTMLElement
.
Đây là lý do tại sao
$("#frame")[0].setAttribute("width", "200");
công trình, nhưng
$("#frame").setAttribute("width", "200");
không. Phần tử jquery không có phương thức đó, mặc dù các đối tượng HTMLElement
trong danh sách của nó.
Nếu bạn muốn (vì lý do gì) sử dụng một HTMLElement
phương pháp tự nhiên (hoặc một phương pháp phổ biến đến các yếu tố lợi nhuận chọn của bạn, chẳng hạn như đầu vào, vv), bạn có thể sử dụng phương pháp jquery của each()
, như vậy:
// Set all iframes to width of 250
$("iframe").each(
function(index, elem) {
elem.setAttribute("width","250");
}
);
Gọi lại của phương thức each()
có thể được chuyển qua hai tham số tùy chọn, đầu tiên là chỉ mục của phần tử trong danh sách chọn, thứ hai là phần tử DOM thực tế mà bạn có thể gọi phương thức DOM gốc. Như tôi đã nói, tôi đã thực sự thất vọng khi cố gắng tìm cách sử dụng kết quả bộ chọn của jquery với các phương thức gốc nhiều lần, vì vậy tôi hy vọng điều này sẽ giúp làm sáng tỏ không chỉ lý do tại sao setAttribute()
không hoạt động. nói chung và cách thực sự khiến chúng hoạt động khi bạn không thể tìm thấy tương đương jquery.
+1 để được giải thích chi tiết :) – Sarfraz
+1 để biết thông tin chi tiết^^ – Ben