Ví dụ sau đây hoạt động mà không sử dụng "document.getElementById ('myId')". Tại sao điều đó và OK để bỏ qua "document.getElementById ('myId')"?
Vì trình duyệt đổ tham chiếu đến tất cả các thành phần có id
s vào không gian tên chung, sử dụng tên biến số id
. (Về mặt kỹ thuật, với tên là tên trên đối tượng toàn cục; các thuộc tính của đối tượng chung là các biến toàn cầu.) Tôi khuyên bạn nên không phải dựa vào nó và sử dụng document.getElementById
(hoặc tương tự). Không gian tên chung là thực sự đông đúc và có rất nhiều thứ khác có thể xung đột.
Ví dụ, nếu bạn có
<div id="foo">...</div>
và
function foo() {
}
Sau đó chỉ cần sử dụng foo
trong mã của bạn sẽ cung cấp cho bạn các chức năng, không phải là phần tử.
Tương tự như vậy nếu bạn có
<input type="text" id="name">
... và sử dụng name
trong mã của bạn, bạn sẽ nhận được tên của cửa sổ (một chuỗi), không phải là HTMLInputElement
cho lĩnh vực id="name"
của bạn.
Doanh nghiệp bán phá giá tham chiếu đến các phần tử này vào không gian tên chung được bao gồm trong §5.2.4 of the HTML5 spec, trong trường hợp này phần lớn là tài liệu về những trình duyệt đã thực hiện trong một thời gian dài.
Sẽ có nhiều chuyển đổi DOM hơn nếu tôi không lưu trữ ID trong biến hay là một số biến thể đã biến đổi như thế nào?
Biến này đã là biến toàn cục cho mỗi trường hợp trên, do đó không có quá trình truyền tải DOM bổ sung. Trong một hàm lồng nhau, có thể có nhiều sự truyền tải chuỗi phạm vi hơn, nhưng đó không phải là vấn đề lớn.
Nhưng một lần nữa, tôi khuyên không dựa vào các yếu tố globals tự động. Thay vào đó, hãy bọc mã của bạn trong một chức năng phạm vi (như bạn đã hiển thị) và nhận các thành phần có mục đích với getElementById
, querySelector
, querySelectorAll
, v.v., nếu thích hợp. Nếu bạn dựa vào các hình cầu tự động, tỷ lệ cược cuối cùng bạn sẽ bị một cuộc xung đột cắn. Nhưng đây là ý kiến.
Lưu ý rằng nhìn lên các yếu tố với getElementById
là thực sự thực sự nhanh, vì vậy tài liệu tham khảo bộ nhớ đệm thường không cần thiết vì lý do hiệu suất (bạn có thể muốn làm như vậy vì những lý do khác, như mã hóa thuận tiện). Tìm kiếm mọi thứ với các bộ chọn (querySelector
, querySelectorAll
) hơi chậm hơn một chút, nhưng tôi sẽ lo lắng về nó khi/nếu có sự cố. :-)
jsfiddle: http://jsfiddle.net/feeela/2zr5Lgfo/ – feeela
Khi có nhiều yếu tố như vậy được yêu cầu trong trang web, có thể bạn không nên lưu trữ mọi thứ. –