2011-10-24 10 views
5

Używam skryptu bookmarklet jQueryify na stronie, dzięki czemu mogę wywoływać funkcje jQuery z konsoli. Ale za każdym razem wywołać funkcję jQuery na wybranym obiekcie, pojawia się błąd:jQuery w konsoli nie działa poprawnie

"TypeError: jQuery("li")[0].children[0].html is not a function 
[Break On This Error] jQuery('li')[0].children[0].html(); 

Próbowałem to w Firebug, a także konsoli Webkit Google Chrome.

+0

Klikasz w bookmarklet, prawda? Czy możesz połączyć się z bookmarkletem, którego używasz, i przykładową stroną z wprowadzonymi danymi? – Whetstone

+0

Po prostu potwierdziłem to na stronie, która już ładuje jQuery, więc nie sądzę, że to tylko bookmarklet FYI. – HurnsMobile

Odpowiedz

9

nie jesteś już pracy z obiektami jQuery przy użyciu nawiasów kwadratowych.

jQuery("li")[0] 

to powrót 1st li jako DOMElement, a nie obiektu jQuery.

jQuery("li")[0].children[0] 

ta zwraca 1st dziecku 1st li „s jako DOMElement, a nie obiektu jQuery.

.html() 

Ta funkcja działa tylko w przypadku obiektów jQuery. W przypadku DOMElements można użyć właściwości .innerHTML.

Proponuję zamiast zajmować się DOMElements, powinieneś kontynuować pracę z obiektami jQuery. Spróbuj użyć zamiast tego:

jQuery('li').eq(0).children().eq(0).html() 
+0

+1, bardzo fajny przykład – JaredPar

+0

Dlaczego głosowanie na niższy poziom? ** EDIT **: Rozumiem, dlaczego. 'children (0)' powinno być 'children(). eq (0)'. Naprawiono :-P –

+1

@Rocket to był mój minus. Przepraszam, tylko pomyłka. +1 za kłopot! – genesis

3

Spróbuj następujących

jQuery(jQuery("li")[0].children[0]).html(); 

lub lepszy

jQuery("li:eq(0)").children(':eq(0)').html(); 

lub inny

jQuery("li:eq(0)").children().eq(0).html(); 

nawet ten zadziała

jQuery("li").eq(0).children().eq(0).html(); 
+0

Nie, '[0]' zwraca obiekt DOM. – pimvdb

+0

Błąd dotyczy "html", a nie "dzieci" – JaredPar

+0

'jQuery (" li ") [0]' jest obiektem DOMElement, a nie jQuery, dlatego nie ma funkcji 'children()'. –

5

Wygląda na to, że próbujesz wywołać funkcję jQuery, html, na obiekcie DOM children[0]. Spróbuj zawijania, że ​​w obiekcie jQuery i następnie wywołanie html

var temp = jQuery("li")[0].children[0]; 
var html = jQuery(temp).html(); 
+2

@genesis tak, to własność DOM. https://developer.mozilla.org/en/DOM/Element.children – JaredPar

5

Sprawdź wynikiem jQuery("li")[0].children[0], to regularne NIE obiekt DOM obiekt jQuery. Bez widząc HTML nie mogę polecić lepszego wyboru, ale tani i zabrudzony poprawka byłaby

jQuery(jQuery('li')[0].children[0]).html();

To będzie konwertować obiekt DOM doprowadzić do obiektu jQuery, który posiada funkcję .html().

+0

Dzięki! to ma sens i teraz działa! –

3

Dostęp do elementów tablicy w obiekcie jquery (przy użyciu []) zwraca DOMElement, który oczywiście nie ma metod jquery. Prawdopodobnie chcesz zamiast tego użyć eq().