Ext JS: String nach HTML-Element durchsuchen

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Ext JS: String nach HTML-Element durchsuchen

    Hi Leute!

    Dieser Beitrag ist zugleich meine Vorstellung in diesem Forum. Ich bin bei meiner Suche nach einer Problemlösung auf dieses Forum gestoßen und werde nun öfters hier reinschauen.
    Ich bin Webshop-Programmierer bei einem Versandhaus für Textilien und arbeite zurzeit an einer Webshop-App auf der Basis von Sencha Touch.

    Meine Arbeit führte mich zu einem kleinen Problem, bei dem mir sicherlich jemand helfen kann.

    Mein Ziel:
    Ich will die (HTML-)response einer AJAX-Abfrage nach HTML-Elementen untersuchen. Beispielcode:

    Source Code

    1. Ext.Ajax.request({
    2. url: 'xyz.php',
    3. success: function(response){
    4. data = response.responseText;
    5. // z. B. data = '<div id="testdiv">innertext</div>'
    6. // hier soll nun data nach z. B. der ID 'testdiv' durchsucht werden
    7. // irgendwas in der Art wie data.select('#testdiv');
    8. }
    9. });


    Ich hoffe ich hab meine Problemstellung klar dargelegt.

    Vor ein paar Tagen bin ich auf eine Möglichkeit gestoßen, die mir aber noch ein bisschen zu komplex erscheint. Dort wurde extra für 'data' ein DIV-Container erstellt, dieser in den DOM geladen und dann durchsucht. Muss doch aber auch eine einfachere Lösung geben, oder nicht?

    Viele Grüße
    Andy Bee
  • Hallo Andy, und willkommen bei easy-coding.
    Arbeitest du mit (sauberem) XHTML? Dann schau nicht in responseText, sondern verwende responseXML.
    responseXML ist ein stink normaler DOM Knoten. Du kannst also direkt darauf arbeiten (x.getElementsByTagName('div')) oder den DOM Knoten in ein Ext Element umwandeln.

    $(x).select('#testdiv')
    ^^ eventuell gibts bei Ext eine andere Syntax dafür. ZUmindest bei jquery kann man einfach DOM Knoten in jquery Elemente umwandeln.

    Lg
  • Hallo Torben,

    vielen Dank erstmal für deine schnelle Antwort!
    Wenn ich mit AJAX eine php-Datei lade, enthält das Attribut responseXML leider nur null. Wenn ich eine .xml-Datei lade funktioniert das Ganze, aber das bringt mir in meinem Fall leider nichts :(

    Außerdem hätte es mich nur mal interessiert ob es eine Funktion für das "Parsen" eines Strings in einen DOM-Knoten gibt, quasi unabhängig von dem AJAX-Request. Wäre mal interessant zu wissen :)

    Viele Grüße
    Andy
  • Hallo Torben,

    es ist doch eigentlich immer so.. wenn man im Netz nach einer Lösung für ein Problem sucht, braucht man meistens nur die richtigen Suchbegriffe.
    In diesem Sinne ein großes DANKE an dich, denn dein Post hat mich dazu verleitet noch einmal mit folgenden Suchbegriffen zu suchen "parse string to Dome node" und das brachte mich jetzt endlich auf das von mir gewünschte Ergebnis:

    Source Code

    1. var dom = (new DOMParser()).parseFromString(string, "text/xml"); // von String zu DOM-Knoten
    2. var stringAgain = (new XMLSerializer()).serializeToString(dom); // von DOM-Knoten zurück zu String


    und wenn irgendwann mal jemand auf den Thread stößt, hier noch eine (meiner Meinung nach kompliziertere) Lösung

    Source Code

    1. var div = document.createElement('div');
    2. div.innerHTML = string;
    3. var dom = div.childNodes;


    Folglich sollte man mit

    Source Code

    1. Ext.select(dom) // FALSCH! Geht nur mit DomQuery
    2. var dq = Ext.DomQuery;
    3. var obj = dq.selectNode('div', dom);


    auf den DOM-Knoten zugreifen und ihn in ein Ext-Objekt (in dem Fall obj) umwandeln können.

    Viele Grüße
    Andy

    The post was edited 2 times, last by Andy Bee ().