3 Stimmen

Arbeiten Sie mit der AJAX-Antwort mit DOM-Methoden

Ich rufe ein gesamtes HTML-Dokument über AJAX ab - und das funktioniert gut. Aber ich muss bestimmte Teile dieses Dokuments extrahieren und damit arbeiten.

Die Verwendung eines Frameworks (jquery, mootools, etc.) ist keine Option.

Die einzige Lösung, die mir einfällt, ist, den (.*) Körper des HTML-Dokuments mit einem Regex (ja, ich weiß, schrecklich) zu erfassen, diesen in ein verstecktes Element im aktuellen Dokument DOM einzufügen und von dort aus damit zu arbeiten.

Gibt es einen einfacheren / besseren Weg?

Update

Ich habe einige Tests durchgeführt, und das Einfügen eines gesamten HTML-Dokuments in ein erstelltes Element verhält sich in den von mir getesteten Browsern etwas anders. Zum Beispiel:

  • FF3.5: behält die Inhalte der HEAD- und BODY-Tags bei
  • IE7 / Safari4: Enthält nur das, was zwischen ... liegt
  • Opera 10.10: Behält HEAD und alles darin enthaltene bei, behält Inhalte des BODY bei

Das Verhalten von IE7 und Safari ist ideal, aber verschiedene Browser handhaben dies unterschiedlich. Da ich ein vorherbestimmtes HTML-Dokument lade, denke ich, dass ich den regEx verwenden werde, um das zu greifen, was ich will, und es in ein DOM-Element einzufügen - es sei denn, jemand hat andere Vorschläge.

5voto

Matchu Punkte 80505

Elemente können existieren, ohne sich auf der Seite selbst zu befinden. Einfach den HTML-Code in ein Dummy-Div einfügen.

var wrapper = document.createElement('div');
wrapper.innerHTML = "foobar";
wrapper.getElementsByTagName('li').length; // 2

Angesichts Ihrer Bearbeitungen geraten wir in eine knifflige Situation, da Sie getElementById möchten. Die Angelegenheit wäre wahrscheinlich einfach, wenn Sie einfach ein neues virtuelles Dokument über document.implementation.createDocument erstellen könnten, aber der IE unterstützt das überhaupt nicht.

Die Verwendung eines Regex ist eine unordentliche Angelegenheit, denn was ist, wenn wir etwas sehen wie ? Sie könnten wahrscheinlich Ihren Regex gierig machen, damit er zur letzten Instanz von übergeht, aber wenn Sie auf Probleme stoßen, könnte eine gründlichere Analyse erforderlich sein. Selbst wenn ein komplettes Framework keine Option ist, möchten Sie möglicherweise etwas wie Sizzle verwenden, den Kern von Bibliotheken wie jQuery, um das gewünschte Element zu suchen. Oder, wenn Sie wirklich in einer puristischen Stimmung sind, könnten Sie die rekursive Suchfunktion selbst schreiben - aber warum diesen Aufwand betreiben, wenn es schon jemand anders getan hat?

var response_el = document.createElement('html'), foo;
response_el.innerHTML = der_html_elemente_inhalt;
foo = Sizzle('#foo', response_el);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X