Czy to jest:
var contents = document.getElementById('contents');
Tak samo jak to:
var contents = $('#contents');
Biorąc pod uwagę, że jQuery jest załadowany?
javascript
jquery
jquery-selectors
Phillip Senn
źródło
źródło
Odpowiedzi:
Nie dokładnie!!
W jQuery, aby uzyskać ten sam wynik
document.getElementById
, możesz uzyskać dostęp do obiektu jQuery i uzyskać pierwszy element w tym obiekcie (pamiętaj, że obiekty JavaScript działają podobnie jak tablice asocjacyjne).źródło
document.getElementBy
nie działa poprawnie w <IE8. Dostaje również elementy,name
dlatego teoretycznie można argumentować, żedocument.getElementById
jest nie tylko mylący, ale może zwracać nieprawidłowe wartości. Myślę, że @John nowy to, ale myślałem, że dodanie go nie zaszkodzi.$('#'+id)[0]
nie jest równy,document.getElementById(id)
ponieważid
może zawierać znaki traktowane specjalnie w jQuery!jquery equivalent of document.getelementbyid
a pierwszym wynikiem jest ten post. Dziękuję Ci!!!$('#contents')[0].id
zwraca nazwę id.Nie.
Wywołanie
document.getElementById('id')
zwróci surowy obiekt DOM.Wywołanie
$('#id')
zwróci obiekt jQuery, który otacza obiekt DOM i zapewnia metody jQuery.Dlatego możesz wywoływać tylko metody jQuery, takie jak
css()
lubanimate()
podczas$()
wywołania.Możesz także napisać
$(document.getElementById('id'))
, który zwróci obiekt jQuery i jest równoważny z$('#id')
.Bazowy obiekt DOM można uzyskać z obiektu jQuery, pisząc
$('#id')[0]
.źródło
In one sentence, DOM objects are the objects that the web browser is using to render elements on the web page whereas jQuery objects are basically wrapper objects around a set of DOM elements.
Blisko, ale nie to samo. Otrzymują ten sam element, ale wersja jQuery jest opakowana w obiekt jQuery.
Odpowiednikiem byłoby to
albo to
Wyciągną one element z obiektu jQuery.
źródło
Uwaga na temat różnicy prędkości. Dołącz następujący fragment kodu do wywołania onclick:
Alternatywnie komentowanie jednego, a następnie komentowanie drugiego. W moich testach
Z drugiej strony
Oczywiście, to już koniec
10000
iteracji, więc w prostszej sytuacji prawdopodobnie użyłbym jQuery dla łatwości użycia i wszystkich innych fajnych rzeczy takich jak.animate
i.fadeTo
. Ale tak, techniczniegetElementById
jest nieco szybszy .źródło
$('#someID')
zdocument.getElementById("someID")
? Pracuję nad czymś, z czego intensywnie korzystałem,$('#someID')
a moja strona działa wolno w przypadku dużych plików. Proszę zasugeruj mi, jaki powinien być mój ruch.var $myId = $('#myId');
i ponownie użyj zapisanej zmiennej$myId
. Wyszukiwanie według identyfikatora jest na ogół dość szybkie, więc jeśli strona jest powolna, prawdopodobnie istnieje inny powód.Nie. Pierwszy zwraca element DOM lub null, podczas gdy drugi zawsze zwraca obiekt jQuery. Obiekt jQuery będzie pusty, jeśli żaden element o identyfikatorze nie
contents
zostanie dopasowany.Zwrócony przez DOM element
document.getElementById('contents')
pozwala na takie rzeczy, jak zmiana.innerHTML
(lub.value
) itp., Jednak będziesz musiał użyć metod jQuery na obiekcie jQuery.Jest bardziej ekwiwalentny, jednak jeśli żaden element o id nie
contents
zostanie dopasowany,document.getElementById('contents')
zwróci null, ale$('#contents').get(0)
zwróci niezdefiniowany.Jedną z korzyści korzystania z obiektu jQuery jest to, że nie otrzymasz żadnych błędów, jeśli nie zostaną zwrócone żadne elementy, ponieważ obiekt jest zawsze zwracany. Jednak wystąpią błędy, jeśli spróbujesz wykonać operacje na
null
zwróconym przezdocument.getElementById
źródło
Nie, w rzeczywistości ten sam wynik byłby:
jQuery nie wie, ile wyników zostanie zwróconych z zapytania. To, co otrzymujesz, to specjalny obiekt jQuery, który jest zbiorem wszystkich kontrolek pasujących do zapytania.
Częścią tego, co sprawia, że jQuery jest tak wygodne, jest to, że metody MOST wywoływane w tym obiekcie, które wyglądają tak, jakby były przeznaczone do jednej kontroli, są w rzeczywistości w pętli wywoływanej dla wszystkich elementów w kolekcji
Kiedy używasz składni [0], bierzesz pierwszy element z wewnętrznej kolekcji. W tym momencie otrzymujesz obiekt DOM
źródło
Na wypadek, gdyby ktoś to trafił ... Oto kolejna różnica:
Jeśli identyfikator zawiera znaki, które nie są obsługiwane przez standard HTML (patrz pytanie SO tutaj ), jQuery może go nie znaleźć, nawet jeśli robi to getElementById.
Zdarzyło mi się to z identyfikatorem zawierającym znaki „/” (np. Id = „a / b / c”) przy użyciu Chrome:
udało mi się znaleźć mój element, ale:
nie.
Przy okazji, prostą poprawką było przeniesienie tego identyfikatora do pola nazwy. JQuery nie miał problemu ze znalezieniem elementu za pomocą:
źródło
Tak jak większość ludzi powiedziała, główna różnica polega na tym, że jest on zawinięty w obiekt jQuery za pomocą wywołania jQuery w porównaniu do surowego obiektu DOM przy użyciu prostego JavaScript. Obiekt jQuery będzie oczywiście mógł wykonywać z nim inne funkcje jQuery, ale jeśli potrzebujesz tylko prostej manipulacji DOM, takiej jak podstawowe stylizowanie lub podstawowa obsługa zdarzeń, prosta metoda JavaScript jest zawsze odrobinę szybsza niż jQuery, ponieważ nie „ trzeba załadować do zewnętrznej biblioteki kodu zbudowanej na JavaScript. Oszczędza to dodatkowy krok.
źródło
var contents = document.getElementById('contents');
var contents = $('#contents');
Fragmenty kodu nie są takie same. pierwszy zwraca
Element
obiekt ( źródło ). Drugi, równoważnik jQuery, zwróci obiekt jQuery zawierający kolekcję zerowego lub jednego elementu DOM. ( dokumentacja jQuery ). Wewnętrznie jQuery korzystadocument.getElementById()
z wydajności.W obu przypadkach, jeśli znaleziono więcej niż jeden element, zwracany jest tylko pierwszy element.
Podczas sprawdzania projektu github pod kątem jQuery znalazłem następujące fragmenty linii, które wydają się używać kodów document.getElementById ( https://github.com/jquery/jquery/blob/master/src/core/init.js wiersz 68 i dalej)
źródło
Jeszcze jedna różnica:
getElementById
zwraca pierwsze dopasowanie, a$('#...')
zwraca kolekcję dopasowań - tak, ten sam identyfikator można powtórzyć w dokumencie HTML.Ponadto
getElementId
jest wywoływany z dokumentu, natomiast$('#...')
można go wywoływać z selektora. Tak więc w poniższym kodziedocument.getElementById('content')
zwróci całe ciało, ale$('form #content')[0]
wróci do formularza.Używanie zduplikowanych identyfikatorów może wydawać się dziwne, ale jeśli używasz czegoś takiego jak Wordpress, szablon lub wtyczka mogą używać tego samego identyfikatora, co w treści. Selektywność jQuery może ci w tym pomóc.
źródło
jQuery jest oparty na JavaScript. Oznacza to, że i tak to tylko javascript.
document.getElementById ()
Jquery $ ()
źródło
Opracowałem bazę danych noSQL do przechowywania drzew DOM w przeglądarkach internetowych, w których odniesienia do wszystkich elementów DOM na stronie są przechowywane w krótkim indeksie. Dlatego funkcja „getElementById ()” nie jest potrzebna do pobierania / modyfikowania elementu. Gdy elementy w drzewie DOM są tworzone na stronie, baza danych przypisuje zastępcze klucze podstawowe do każdego elementu. Jest to bezpłatne narzędzie http://js2dx.com
źródło
Wszystkie powyższe odpowiedzi są poprawne. Jeśli chcesz zobaczyć to w akcji, nie zapomnij, że masz konsolę w przeglądarce, w której możesz zobaczyć krystalicznie czysty wynik:
Mam HTML:
Przejdź do konsoli
(cntrl+shift+c)
i użyj tych poleceń, aby wyraźnie zobaczyć swój wynikJak widać, w pierwszym przypadku otrzymaliśmy sam tag (ściśle mówiąc, obiekt HTMLDivElement). W tym ostatnim nie mamy właściwie zwykłego obiektu, ale tablicę obiektów. Jak wspomniano w innych odpowiedziach powyżej, możesz użyć następującego polecenia:
źródło
Wszystkie odpowiedzi są dziś stare, od 2019 r. Możesz bezpośrednio uzyskać dostęp do fildów z kluczem id w javascript, po prostu spróbuj
Demo online! - https://codepen.io/frank-dspeed/pen/mdywbre
źródło