2010-12-13 14 views
7

Załaduję HTML z ajaxem. Chcę załadować wynik do obiektu jquery. Próbowałem, ale zwraca null. Jak mogę to zrobić? Mam kompletną stronę zawierającą doctype, elementy głowy i elementy ciała.Parsowanie kompletnej strony html z jquery

var test = $(result); //result contains html code 
alert(test.html()); //returns null 

Ładowanie danych przy użyciu tej funkcji.

function ajaxLoadContent(element) { 
    $.ajax({ 
     url: "url to the page", 
     type: "GET", 
     timeout: 5000, 
     datattype: "html", 
     success: function(result) { 
     //handler 
     }, 
    }); 
    return false; 
+0

Rezultatem jest prawdopodobnie tylko ciąg – hunter

+0

można pokazać w jaki sposób można uzyskać dane do 'result'? Czy też "alert (wynik);" pokazuje html w alarmie? Samo zrzucenie html do takiej zmiennej nie powoduje automatycznie powrotu funkcji .html() do html. zmienna wyniku może już być html. – Josh

+1

Dlaczego po prostu nie wydrukować wyniku? Powinien to być tekst. – WaiLam

Odpowiedz

45

Jest to jakiś czas temu, ale może nadal jesteś zainteresowany w tym ..

Stażysta realizacja $(String) nie jest w stanie zbudować obiekt jQuery, który zawiera head lub body tagi. Po prostu je zignoruje i przesunie wszystkie elementy na wyższy poziom.

Więc jeśli łańcuch jest na przykład

<html> 
    <head> 
    <meta ...> 
    </head> 
    <body> 
    <div id="a"/> 
    </body> 
</html> 

wynikowy obiekt jQuery będzie tablica z dwóch elementów

[<meta ...>, <div id="a" />] 

aby uzyskać body -jak obiektu jQuery wyciąć wszystko, ale zawartość ciała przed przejściem do jQuery:

body = '<div id="body-mock">' + html.replace(/^[\s\S]*<body.*?>|<\/body>[\s\S]*$/ig, '') + '</div>'; 
var $body = $(body); 

teraz rzeczy działają jak exp wstrzyknięty .. np

$body.find('#a') 

nadzieję, że pomoże ..

+2

dlaczego ta odpowiedź nie została przyjęta? Uratuj mnie od bólu głowy. Dzięki! – Xaver

+3

dlaczego jQuery nie mogą parsować głowy i ciała? – nbrustein

+0

Insta-downvote za korzystanie z wyrażenia regularnego w HTML. –

2

test jest po prostu ciąg html, więc może po prostu to zrobić, aby pokazać zawartość

alert(result); 

a jeśli chcesz związać że do elementu

$("#myDiv").html(result); 
+0

Chcę móc korzystać z niektórych funkcji jquery na zwracanej wartości. –

+1

, ponieważ wynik jest tylko ciągiem, który prawdopodobnie będziesz musiał umieścić na stronie, zanim będziesz mógł wchodzić z nim w interakcję z jQuery. – hunter

+0

Mzz niż muszę umieścić w ukrytym iframe chyba. To byłoby nieprzyjemne. Prawdopodobnie lepiej zaprojektować rozwiązanie z pudełka. –

-1

Spróbuj load metoda obiektu jQuery: http://api.jquery.com/load/

Załaduj dane z serwera i umieść zwrócony kod HTML na dopasowany element .

+0

Autor tej odpowiedzi może być na coś. Konwertowanie całego ciągu znaków HTML na adres URL 'data:' i wywoływanie $ .ajax() na nim może być TYLKO niezawodną metodą. –

1
function ajaxLoadContent(element) { 
$.ajax({ 
    url: "url to the page", 
    type: "GET", 
    timeout: 5000, 
    datattype: "html", 
    success: function(data) { 
    var result = $(data); 
    }, 
}); 
return false; 

Teraz powinno być w stanie wywołać wynik takiego (należy pamiętać, że to nie dodaje się do DOM jeszcze):

alert(result.html()); 

Dodaj do DOM

result.appendTo("body"); 

Let wiem, czy to działa dla ciebie.

+1

Nie, to nie działa, ponieważ html i get zawiera nagłówek, treść, a nawet doctype. –

+0

ok zmienić na: var result = data; $ ("html"). Html (wynik); Daj mi znać, czy to działa? –

+0

I mieć dostęp do elementów głowy, jak również. Ta praca dotyczy tylko elementów bryłowych i elementu tytułowego. –