[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • jQuery parseHTML Frage
Seite 1 von 1

jQuery parseHTML Frage

Verfasst: 28. Aug 2014, 15:04
von webghost
Hallo

ich stehe mal wieder vor einem kleinen jQuery Problem :roll: ..und zwar komme ich einfach nicht dahinter wie ich richtig auf Elemente zugreifen kann, wenn sich das HTML in einem String befindet.

Kurz zum Hintergrund - es geht um eine Funktion in einer Browsererweiterung welche Daten von einer entfernten Seite holt. Hier habe ich das ganze mal auf's wesentliche beschränkt, die Variable htmlString enthält also die abgeholten Daten.

Code: Alles auswählen

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>test</title>
        <script src="jquery-1.11.1.min.js"></script>
        <script>
            $(document).ready(function() {

                var htmlString = '<!DOCTYPE html>' +
                        '<html>' +
                        '<head>' +
                        '<meta name="firstName" content="false">' +
                        '</head>' +
                        '<body>' +
                        '<div id="test1" name="test1">test2</div>' +
                        '<div id="test2" name="test2">test2</span>' +
                        '</body>' +
                        '</html>';

                var $ = jQuery;
                var html = $.parseHTML(htmlString);
                //var html = htmlString;
                
                var test1 = $("#test1", $(html)).attr("name");
                var test2 = $(html).find("#test2").attr("name");
                var test3 = $(html).attr("name");

                console.log(html); //object
                console.log('1: ' + test1); //undefined
                console.log('2: ' + test2); //undefined
                console.log('3: ' + test3); //firstName
                
            });
        </script>
    </head>
    <body>
    </body>
</html>
Scheinbar kann ich, wie test3 zeigt auf Elemente zugreifen, nur sobald ein Selektor ins Spiel kommt ist vorbei. Interessant finde ich dass es gleichermassen funktioniert wenn man parseHTML weg lässt :?:

Im Programm selber habe ich noch ein sehr seltsames Verhalten welches ich aber ausserhalb nicht reproduzieren kann - vom abgerufenen Quelltext kann ich ein Element anhand der ID selektieren ein anderes aber nicht.

Wär super wenn mir jemand auf die Sprünge helfen könnte

Re: jQuery parseHTML Frage

Verfasst: 28. Aug 2014, 21:42
von ds
Das Ergebnis von parseHTML ist noch kein vollständiges DOM-Element, warum auch immer. Du kannst es z.B. per append an ein neues Element hängen, dann funktioniert es:

Code: Alles auswählen

var html = $('<div>').append($.parseHTML(htmlString));
Allerdings hast du danach eine Ebene mehr drin und müsstest deinen meta-Selektor etwas anpassen, um an firstName zu kommen:

Code: Alles auswählen

var test3 = $(html).find('meta').eq(0).attr("name");
Viele Grüße
_Dirk

Re: jQuery parseHTML Frage

Verfasst: 29. Aug 2014, 09:39
von webghost
jetzt hab ich's endlich kapiert :D danke Dir

aber den Sinn dahinter sehe ich nicht so ganz, die Methode ist doch genau dafür gemacht. Wozu soll es gut sein HTML zu parsen wenn man dann nicht den Dom hat :?