You are not logged in.

  • Login

1

Friday, August 5th 2011, 8:44pm

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:

JavaScript Code

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


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

2

Saturday, August 6th 2011, 3:24pm

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

3

Sunday, August 7th 2011, 3:10pm

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

4

Sunday, August 7th 2011, 3:46pm

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:

JavaScript Code

1
2
3
var dom = (new DOMParser()).parseFromString(string, "text/xml"); // von String zu DOM-Knoten                        
 
                        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

JavaScript Code

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


Folglich sollte man mit

JavaScript Code

1
2
3
4
Ext.select(dom) // FALSCH! Geht nur mit DomQuery
 
var dq = Ext.DomQuery;
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

This post has been edited 2 times, last edit by "Andy Bee" (Aug 7th 2011, 5:43pm)


6

Tuesday, August 23rd 2011, 6:43pm

Und für alle die es interessiert, das Ganze mit jQuery:

JavaScript Code

1
$("<div><span>Text</span></div>").find("div");


Wieso kann das bei Ext nicht auch so einfach und logisch sein? Ich versteh's nicht...

Similar threads

Social bookmarks