Po pierwsze,
document.querySelector("#elem");
ma przewagę w tym, że, w przeciwieństwie do document.getElementId, można go zwrócić klas. Jednak przydatność tego jest znacznie ograniczona przez fakt, że zwraca on tylko pierwszy obiekt o tej nazwie klasy, więc równie dobrze możesz użyć identyfikatora, jeśli nie szukasz konkretnego obiektu z tą nazwą klasy. jeśli używasz,
document.querySelectorAll
Uważam jednak, (mogę się mylić), zwraca wszystkie elementy z tej nazwy klasy jako tablica, gdzie regularne querySelector jest odpowiednikiem querySelectorAll [0]. Dodatkową zaletą jest to, że można uruchamiać zapytania css3, co może być całkiem przydatne.
drugie,
document.getElementById("elem");
ma bardzo dobrą przewagę nad queryselector w tym sensie, że jest prawie 5 razy szybciej, więc jeśli siedzi tam z kilku tysięcy linii kodu i chcesz zoptymalizuj wspomniany kod, a następnie pobierz ExendById.
Wreszcie
document.querySelector("[id=elem]");
ja osobiście nie widzę potrzeby, aby korzystać z tego w każdej sytuacji. Jeśli potrzebujesz querySelector, dlaczego nie po prostu użyć #? Jest to dokładnie równoznaczne z pierwszym przykładem querySelector, jednak ma wiele bezużytecznych znaków.
Edycja: Dla uproszczenia, podsumowując, prawdopodobnie lepiej będzie użyć document.getElementById.
[TEST IT] (http://jsperf.com) – PeeHaa
[tutaj] (http://jsperf.com/getelementbyid-vs-queryselector) szybkie łącze do konkretnego testu –
Jest tak wiele rzeczy, które mogą wpływać na to, jak duży jest twój DOM? Ile węzłów dziecko-rodzic-dziecko może przechodzić przez DOM? Używanie kodu w pytaniu z pojedynczym elementem DOM nie ma znaczenia. Nawet połączony test jest bliski braku znaczenia. Pytanie brzmi bardziej, kiedy używasz tego? Nie możesz użyć [** getElementById **] (https://developer.mozilla.org/en-US/docs/DOM/document.getElementById) podczas szukania klasy oczywiście, ale możesz zrobić [dokument **. querySelector (".myclass") **] (https://developer.mozilla.org/en-US/docs/DOM/Document.querySelector) – Nope