getAttributetruy xuất thuộc tính của phần tử DOM, trong khi el.idtruy 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.hrefvà 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 checkedtài sản. Thuộc tính DOM trả về truehoặc falsetrong 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 valuetính của một inputphầ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
valuecủa một inputphầ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).