2010-11-18 27 views

Trả lời

6

Họ là hoạt động khá khác nhau:

attr (x, '') đặt một thuộc tính cho một chuỗi rỗng

removeAttr (x) xóa bất động sản trên đối tượng nếu có thể, hoặc loại bỏ nó và đặt lại giá trị mặc định của nó nếu nó được định nghĩa bởi DTD cho lớp đối tượng đó.

3

Một số thuộc tính là boolean (cho dù chúng tồn tại hoặc không tồn tại). Lấy ví dụ disabled. Nếu nó tồn tại thì nó đúng, không quan trọng giá trị được đặt là gì. Vì vậy, bạn phải sử dụng .removeAttr('disabled') để bật lại thành phần. Tuy nhiên, jQuery bình thường hóa nó một chút, bạn có thể sử dụng .attr('disabled', false); Vì vậy, tôi đoán câu trả lời là ngữ nghĩa.

Edit:

Câu trả lời này chỉ có một số upvotes đó cảnh báo rằng tôi đã trả lời này cách đây vài năm.

Sử dụng này để thay thế cho bất động sản -

.prop('disabled', true) // set as disabled 
.prop('disabled', false) // set as enabled 
.prop('disabled') // return boolean (is this disabled?) 

KHÔNG sử dụng removeProp ('disabled') vì điều này sẽ xóa các tài sản từ các đối tượng DOM (mà không phải những gì bạn đang có ý định làm).

9

Cho rằng định nghĩa của removeAttr từ thư viện jQuery (xem bên dưới). Tôi muốn nói có.

removeAttr: function(name, fn) { 
     return this.each(function(){ 
      jQuery.attr(this, name, ""); 
      if (this.nodeType === 1) { 
       this.removeAttribute(name); 
      } 
     }); 

Nguồn: Jquery 1.4.3 uncompressed version

Mặc dù nó vốn dĩ là chủ quan. Tôi nghĩ rằng việc sử dụng removeAttr là một cách tiếp cận tự tài liệu hơn. Tuy nhiên, tôi có thể thấy những người khác nghĩ ngược lại.

+3

Chúng khác nhau, bởi chính mã đó - đối với các phần tử, nó đặt attr thành '' * AND * (đối với phần tử) sẽ loại bỏ thuộc tính khỏi DOM. –

+0

@pst - Điểm được chụp. Tôi đã thay đổi "Không" thành "có" – JohnFx

+0

Tất nhiên, nó khá trễ, nhưng hãy kiểm tra phản ứng @ john-strickler. Việc đặt thuộc tính thành rỗng sẽ để thẻ trong thẻ, vì vậy nó "hiện diện". Điều này quan trọng đối với các thuộc tính được sử dụng làm cờ, như 'disabled' và các thuộc tính khác. – rewritten

2

khác biệt đầu tiên:

.removeAttr('name') // try to remove the attribute 'name' from the DOM 
.attr('name', '') // set the attribute 'name' to empty string 

Sự khác biệt thứ hai, có lẽ đã xảy ra chỉ với tôi, là .removeAttr() làm việc một cách chính xác trong Firefox và IExplorer nhưng không phải là rất tốt trong Chrome và không làm việc ở tất cả trên Safari.

Các vấn đề liên quan