Chcę przeanalizować ciąg HTML do obiektu jQuery, a następnie znajdź element według ID.

Próbowałem 3 sposoby poniżej, ale tylko ostatnie prace. Nie wiem, dlaczego inni nie działa?

var html = "<html><body><div id='main'></div></body></html>";

// Not work, return 0
console.log($(html).find('#main').length); 
// Not work, return 0
console.log($($.parseHTML(html)).find('#main').length); 
// Works, return 1
console.log($("<html/>").html(html).find('#main').length); 

Oto próbka: http://jsfiddle.net/nbyofkam/2/

10
andyf 13 sierpień 2014, 12:28

2 odpowiedzi

Najlepsza odpowiedź

To udokumentowane:

Podczas przechodzenia w złożonym HTML niektóre przeglądarki nie mogą generować DOM, który dokładnie replikuje dostarczone źródło HTML. Jak wspomniano, jQuery korzysta z właściwości przeglądarki "s <head> Elementy. W rezultacie elementy włożone mogą nie być reprezentatywne dla oryginalnego ciągu przeszedł.

W rezultacie $(html) jest zredukowany do "<div id="main"></div>". Możesz zweryfikować, że logowanie $(html)[0].outerHTML.

Więc nie możesz użyć find bez owijania go, co robisz.

9
Denys Séguret 13 sierpień 2014, 08:32

Alternatywny sposób na to -

var myTestDiv = document.createElement('div');
var mystr = '<div id="main"></div>';
myTestDiv.innerHTML = mystr;

console.log(myTestDiv.querySelector('div#main'));
8
Stacie 13 sierpień 2014, 08:35