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, sự đồng bộ hóa không đảm bảo cùng một giá trị . Một ví dụ cổ điển là giữa el.href
và el.getAttribute('href')
cho một 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 , thuộc tính href phải là một liên kết được hình thành tốt. 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 cho input
's checked
tài sản. 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 chỉ được đồng bộ hóa một chiều . Ví dụ tốt nhất là thuộc value
tính của một input
phần tử. 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 nhận xét đầu tiên để biết chính xác hơn).
Vì những lý do này, tôi khuyên bạn nên tiếp tục sử dụng thuộc tính DOM , 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.
Trong thực tế, chỉ có hai trường hợp bạn cần sử dụng các thuộc tính:
- Thuộc tính HTML tùy chỉnh, vì nó không được đồng bộ hóa với thuộc tính DOM.
- Để truy cập thuộc tính HTML tích hợp sẵn, 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 mình cần thuộc tính (ví dụ: bản gốc
value
của một input
phần tử).
Nếu bạn muốn giải thích chi tiết hơn, tôi thực sự khuyên bạn nên đọc trang này . Bạn chỉ mất vài phút thôi, nhưng bạn sẽ rất vui vì thông tin (mà tôi tổng hợp ở đây).