2017-03-11 7 views
-2

Ich versuche, einen anderen Seiteninhalt über AJAX zu laden. Es lädt den Inhalt, aber ich habe ein Problem mit dem Parsen neuer Inhalte.JQuery Get/Load kann neue DOM nicht analysieren

Hier ist mein Code

$.get(urlPath, function (content) { 
       var newDom = $(content); 
       var newTitle = newDom.find("title").text(); 
       console.log(newDom); 
       console.log(newDom.find(CLASS.MAIN_CONTENT)); 
       console.log(newTitle); 
       $(CLASS.MAIN_CONTENT).replaceWith(newDom.find(CLASS.MAIN_CONTENT)); 
      }); 

Und dies nicht funktioniert, bekomme ich die gültigen Inhalte Anfrage aber noch nicht hier jedes Element von neuen DOM erhalten können mit $(content)

analysiert Ausgang ist enter image description here

Und hier ist die Rohausgangssignal des Inhalts console.log(content)

enter image description here

Was kann falsch sein, warum funktioniert das nicht?

Antwort

1

Beachten Sie zunächst, dass $() mit, dass HTML parsen wird einige davon wegzuwerfen, weil $() erwartet Körperinhalt, kein vollständiges Dokument zu parsen. Elemente, die scheinbar in der Struktur verschachtelt sind, können auf der obersten Ebene des jQuery-Objekts enden. Zum Beispiel:

var content = $(
 
    "<!doctype html>" + 
 
    "<html>" + 
 
    "<head><title>Example</title></head>" + 
 
    "<body>" + 
 
    "<p>Hi there</p>" + 
 
    "</body>" + 
 
    "</html>" 
 
); 
 
console.log(content.length); // 2 
 
content.each(function() { 
 
    console.log(this.tagName); // TITLE, P 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

find sieht innerhalb die Top-Level-Elemente in einem jQuery-Objekt, sieht aber nicht auf die Top-Level-Elemente selbst, nur ihre Nachkommen. Wenn das Element, das zu Ihrem CLASS.MAIN_CONTENT Selektor passt, auf der obersten Ebene ist, wird es nicht von find gefunden. Sie möchten stattdessen filter. Wenn es in jeder Lage sein kann, möchten Sie eine Kombination aus find und filter:

var mainContent = newDom.find(CLASS.MAIN_CONTENT).add(newDom.filter(CLASS.MAIN_CONTENT)); 
+0

Danke für die Antwort, wie kann ich analysiere neue Titel in diesem Fall? Und ich muss nur den neuen Block mit CLASS.MAIN_CONTENT Selektor zu dem vorhandenen DOM hinzufügen, der den alten ersetzt – HelloMufecayo

+0

@HelloMufecayo: Ich verstehe die Frage nicht. Sie verwenden das jQuery-Objekt, das Sie aus 'filter' (oder' find' oder der Kombination der beiden) erhalten ...? –

+0

Ich habe diese Lösung verwendet, es funktioniert gut http://stackoverflow.com/questions/30676999/parse-entire-html-document-from-string-into-jquery – HelloMufecayo

0

Lösung

var newDom = $('<div></div>').append($.parseHTML(content)); 
       document.title = newDom.find("title").text(); 
       $(CLASS.MAIN_CONTENT).replaceWith(newDom.find(CLASS.MAIN_CONTENT));