Thứ nhất,
document.querySelector("#elem");
Có một lợi thế trong thực tế là, không giống như document.getElementId, nó có thể trở lại lớp học. Tuy nhiên, tính hữu ích của điều này bị giảm đi rất nhiều bởi thực tế là nó chỉ trả về đối tượng đầu tiên với tên lớp đó, vì vậy bạn cũng có thể sử dụng id nếu bạn không tìm kiếm đối tượng đầu tiên với tên lớp đó. nếu bạn sử dụng,
document.querySelectorAll
Tuy nhiên, tôi tin rằng (Tôi có thể sai), nó sẽ trả về tất cả các mục có classname đó như là một mảng, nơi querySelector thường là tương đương với querySelectorAll [0]. Một lợi thế nữa, đó là bạn có thể chạy các truy vấn css3 thông qua nó, điều này có thể khá hữu ích.
Thứ hai,
document.getElementById("elem");
Có một lợi thế rất tốt trên querySelector theo nghĩa là nó gần như là 5 lần nhanh hơn, vì vậy nếu bạn đang ngồi đó với vài ngàn dòng mã và bạn muốn tối ưu hóa mã cho biết, sau đó getElementById là con đường để đi.
Cuối cùng,
document.querySelector("[id=elem]");
tôi, cá nhân tôi, không thấy nhu cầu sử dụng này trong mọi tình huống. Nếu bạn cần một querySelector, tại sao không chỉ sử dụng một #? Điều này là chính xác tương đương với ví dụ đầu tiên của querySelector của bạn, tuy nhiên nó có rất nhiều charaters vô dụng.
Chỉnh sửa: Chỉ cần rõ ràng, tóm lại, bạn có thể nên sử dụng document.getElementById tốt hơn.
[Kiểm tra nó] (http://jsperf.com) – PeeHaa
[Đây là] (http://jsperf.com/getelementbyid-vs-queryselector) liên kết nhanh đến thử nghiệm cụ thể –
Có quá nhiều thứ có thể ảnh hưởng đến điều này, DOM của bạn lớn đến mức nào? Có bao nhiêu nút con-cha-con để duyệt qua trong DOM? Sử dụng mã trong câu hỏi với một phần tử duy nhất trong DOM không tạo ra sự khác biệt nào. Ngay cả bài kiểm tra được liên kết cũng gần như không có ý nghĩa. Câu hỏi là nhiều hơn, khi nào bạn sử dụng cái nào? Bạn không thể sử dụng [** getElementById **] (https://developer.mozilla.org/en-US/docs/DOM/document.getElementById) khi tìm kiếm một lớp rõ ràng nhưng bạn có thể làm [** document. querySelector (".myclass") **] (https://developer.mozilla.org/en-US/docs/DOM/Document.querySelector) – Nope