2010-02-24 15 views
14

W jaki sposób można uzyskać jQuery, aby zwrócił macierzyste elementy DOM, które hermetyzuje?Pobieranie macierzystych elementów DOM z obiektów jQuery?

+1

Co jeszcze można zrobić z selektorami jQuery oprócz "manipulowania elementami"? Mam na myśli, twoje pytanie wydaje się zasadniczo jak "Czy mogę użyć jQuery?" na które odpowiedź brzmiałaby "tak". – Pointy

+0

Dlaczego chcesz to zrobić? I nie, twoje wyrażenie nie zadziała, ponieważ $ ("cheese_tag") zwróci obiekt jQuery. – alexn

+0

Przykro mi, lepszym sposobem na stwierdzenie mojego pytania byłoby: "Czy mogę przekonwertować obiekty jQuery do tych, które mogą normalnie obsługiwać javascript?" jak w jQuery, aby zwrócić obiekt javascript do manipulacji. – mattsven

Odpowiedz

28

Gdy znajdziesz elementy z jQuery, można dostać je za pomocą funkcji „Pobierz”:

var regularElement = $('#myElementId').get(0); 

Wewnątrz „.each()” funkcja «to» wskaźnik odnosi się do «prawdziwego» element:

$('input.special').each(function() { 
    var type = this.type; 
    this.value = "exploding balloon"; 
    // etc 
}) 

Użycie jQuery nie powoduje, że JavaScript jest "inny". It jest Javascript, a DOM nadal jest DOMem.

+1

Zajęło mi chwilę, aby zrozumieć, dlaczego używasz funkcji get() na obiekcie jquery, ale potem przeczytałem komentarze na temat samego pytania. Ma to sens teraz. Widzę, że funkcja get() jest przydatna podczas integracji z nie-jQuery JavaScript. –

+0

Aaaand '$ ('# myElementId') [0]' działa również. – mattsven

0

Zakładam, że próbujesz sprawdzić, czy twój obiekt jQuery jest pierwszym wystąpieniem "sera_tag". Pierwszy znacznik można znaleźć za pomocą selektora :first, a następnie nie trzeba go porównywać. Na przykład, pierwszy tag div będzie: $('div:first').

Aby uzyskać pełną listę selektorów jQuery, zobacz documentation.

+0

Niezupełnie ... Chciałem uzyskać obiekt elementu HTML javascript jako powrót. – mattsven

0

Inne osoby już bezpośrednio odpowiedziały na pytanie. Użyj metody get().

Jednak większość czasu chcesz użyć metod jQuery do manipulacji, a nie do uzyskania dostępu do surowego elementu DOM, a następnie modyfikacji za pomocą "standardowego" JavaScript.

Na przykład za pomocą jQuery można po prostu powiedzieć $ ("mySelector"). AddClass ("myClass"), aby dodać klasę CSS do elementu DOM. Jest to o wiele bardziej skomplikowane (i zależne od przeglądarki) przy użyciu bezpośredniej manipulacji DOM. Ta koncepcja rozciąga się na prawie każdą inną manipulację DOM, którą chciałbyś zrobić.

2

jQuery używa Sizzle Selector Engine *. Możesz również użyć go samodzielnie.

* Potwierdzone Doug Neiner, co oznacza, że ​​znajduje się w prawo;)

+1

Dobrze! Po prostu dodaj sizzle.js, a następnie dodaj tę linię: 'window. $ = Window.Sizzle'. A '$ (" cheese_tag ")' zwróci '[]'. '$ (" # cheese_id ") [0] === document.getElementById (" cheese_id ")' –

+0

Co, nie "Jestem Doug Neiner i akceptuję tę odpowiedź"? Hehe. – Sampson

+3

Jestem Doug Neiner i zatwierdzam tę odpowiedź –

0

Obiekt jQuery stanowi owinięcie tablicowej wokół jednego lub większej liczby elementów DOM. Aby uzyskać odwołanie do rzeczywistych elementów DOM (zamiast obiektu jQuery), masz dwie opcje. Pierwszy (i najszybciej) metodą jest użycie notacji tablicy:

$("#foo")[ 0 ]; // Equivalent to document.getElementById("foo") 

Druga metoda polega na użyciu .get() Funkcja:

$("#foo").get(0); // Identical to above, only slower. 

Można również zadzwonić .get() bez żadnych argumentów, aby pobrać prawdziwa tablica elementów DOM.

+0

Nie wiedziałem, że można nazwać tylko 'get()' dla tablicy. Miły. – mattsven

Powiązane problemy