getAttribute
truy xuất thuộc tính của phần tử DOM, trong khi el.id
truy xuất thuộc tính của phần tử DOM này. Chúng không giống nhau.
Hầu hết thời gian, thuộc tính DOM được đồng bộ hóa với các thuộc tính.
Tuy nhiên, việc đồng bộ hóa không đảm bảo cùng một giá trị. Ví dụ cổ điển là giữa el.href
và el.getAttribute('href')
cho phần tử neo.
Ví dụ:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Hành vi này xảy ra vì theo W3C, tài sản href phải là một liên kết tốt được hình thành. Hầu hết các trình duyệt đều tôn trọng tiêu chuẩn này (đoán xem ai không?).
Có một trường hợp khác cho thuộc tính checked
của input
. Thuộc tính DOM trả về true
hoặc false
trong khi thuộc tính trả về chuỗi "checked"
hoặc một chuỗi rỗng.
Và sau đó, có một số thuộc tính được đồng bộ chỉ một chiều. Ví dụ tốt nhất là thuộc tính value
của phần tử input
. Thay đổi giá trị của nó thông qua thuộc tính DOM sẽ không thay đổi thuộc tính (chỉnh sửa: kiểm tra chú thích đầu tiên để có độ chính xác cao hơn).
Vì những lý do này, tôi khuyên bạn nên tiếp tục sử dụng DOM thuộc tính chứ không phải thuộc tính vì hành vi của chúng khác nhau giữa các trình duyệt.
Trên thực tế, chỉ có hai trường hợp bạn cần phải sử dụng các thuộc tính:
- Một thuộc tính HTML tùy chỉnh, bởi vì nó không được đồng bộ hóa với một tài sản DOM.
- Để truy cập thuộc tính HTML được tích hợp, thuộc tính này không được đồng bộ hóa từ thuộc tính và bạn chắc chắn bạn cần thuộc tính (ví dụ:
value
gốc của phần tử input
).
Nếu bạn muốn giải thích chi tiết hơn, tôi khuyên bạn nên đọc this page. Nó sẽ đưa bạn một vài phút, nhưng bạn sẽ được vui mừng bởi các thông tin (mà tôi tóm tắt ở đây).
Nguồn
2012-04-23 12:25:02
Câu hỏi tương tự: [Thuộc tính và thuộc tính trong HTML] (http://stackoverflow.com/questions/6003819/properties-and-attributes-in-html) – sleske