động cơ Khung selector thường được đánh giá phải tay đầu tiên, vì vậy tôi mong chờ một selector ID ngữ cảnh để document.getElementById
ID và sau đó kiểm tra xem liệu kết quả là trong context node bằng cách đẩy mạnh các parentNode
s. Điều này là khá nhanh, nhưng nó sẽ không hoạt động đối với các cây DOM ngoài tài liệu như ví dụ này. Động cơ chọn sau đó sẽ phải làm điều đó một cách tuyệt vọng chậm, hoặc không quan tâm (ví dụ: Sizzle không hoạt động với DocumentFragment
).
Có một cách tốt hơn để nhận ID bên trong một đoạn mà tôi đã nhớ từ đó, đối với các trình duyệt triển khai Selectors-API (IE8, Firefox 3.5, Opera 10, Safari 3.1, Chrome 3). Bạn có thể sử dụng querySelector
để áp dụng một selector CSS với DocumentFragment
như một nút bối cảnh, như API đòi hỏi DocumentFragment
cụ NodeSelector
:
alert(frag.querySelector('#myId'))
Đây không phải là khá nhanh như getElementById
, nhưng nó tải tốt hơn so với phiên bản DOM . Không may là hầu hết các framework có tối ưu hóa Selectors-API sẽ không sử dụng chúng trong trường hợp này hay bất kỳ khung nào khác với các nút ngữ cảnh, bởi vì cách mà nút ngữ cảnh hoạt động khác nhau trong querySelector
[All
] về cách các khung công tác truyền thống triển khai thực hiện nó như thế nào, làm cho chúng không tương thích.
Selectors-API Level 2 đề xuất các phương pháp 'có phạm vi' hoạt động giống như bộ chọn khung truyền thống ... sẽ mất một lúc trước khi có thể sử dụng được, nhưng chúng tôi có thể sẽ không thấy bộ chọn ngữ cảnh được tối ưu hóa trong khung hiện có cho đến lúc đó. Tôi nghĩ rằng đây là một sự xấu hổ, như mặc dù phương pháp querySelector
sử dụng nút ngữ cảnh để lọc nhưng không phạm vi không phải là khá tốt, nó vẫn còn khá nhiều có thể sử dụng cho tất cả các trường hợp phổ biến.
Bạn không nên thấy nó đáng ngạc nhiên. Ngay lập tức theo mã, anh ta gợi ý rõ ràng là không nên sử dụng nó, "Nó gần như chắc chắn sẽ tốt hơn để theo dõi các tài liệu tham khảo khi bạn đi cùng hơn là dựa vào một chức năng ngây thơ, kém hiệu quả như trên." –
sự bất ngờ là thứ tự hoặc độ lớn: 1000. Tôi mong đợi một cái gì đó giữa 2 và 100. – Olivvv