it-swarm.com.de

Bei der Analyse wurde HTML von jQuery zurückgegeben AJAX anfordern

Was ich versuche zu tun, scheint einfach zu sein: Holen Sie sich eine HTML-Seite durch $.ajax() und ziehen Sie einen Wert daraus heraus.

$(function () {
    $.ajax({
        url: "/echo/html",
        dataType: "html",
        success: function (data) {
            $('#data').text(data);
            $('#wtf').html($(data).find('#link').text());
        },
        data: {
            html: '<!DOCTYPE html><head><title><\/title><link href="../css/popup.css" rel="stylesheet" /><\/head><body><ul><li><a id="link">content<\/a><\/li><\/ul><\/body><\/html>'
        }
    });
});

Das Problem ist, dass jQuery den zurückgegebenen HTML-Code nicht analysiert.

Die Geige , mit der ich spiele, funktioniert in der Zwischenzeit nicht, daher kann ich nichts anderes tun, um ein funktionierendes Beispiel zu liefern.

UPDATE: Meine neue Geige funktioniert gut, aber das Problem ist, dass ich in meinem aktuellen Projekt versuche, ein großes, komplexes Stück HTML zu analysieren. Ist das ein bekanntes Problem?

19
Stephen Collins

Ihr Code funktioniert gut. Sie verwenden die API von jsFiddle einfach nicht richtig. Überprüfen Sie die Dokumente auf /echo/html/ ( http://doc.jsfiddle.net/use/echo.html#html ):

URL:/echo/html /

Die Daten müssen per POST bereitgestellt werden

Sie müssen also Ihren AJAX - Aufruf aktualisieren, um POST zu verwenden. Auch der nachfolgende Schrägstrich wird benötigt.

$(function () {
    $.ajax({
        url: "/echo/html/",
        type: "post",
        dataType: "html",
        success: function (data) {
            $('#data').text(data);
            $('#wtf').html($(data).find('#link').text());
        },
        data: {
            html: '<!DOCTYPE html><head><title><\/title><link href="../css/popup.css" rel="stylesheet" /><\/head><body><ul><li><a id="link">content<\/a><\/li><\/ul><\/body><\/html>'
        }
    });
});

DEMO: http://jsfiddle.net/hcrM8/6/

16
Rocket Hazmat

Wenn Sie es analysieren wollen, hat jquery einen schlauen Trick :)

 ParsedElements = $(htmlToParse);
 Console.log(ParsedElements);

Sie haben jetzt DOM-Elemente, die Sie durchlaufen können, ohne sie in den Hauptteil des Dokuments einzufügen.

6
Anthony Iacono

jQuery.parseHTML ()

http://api.jquery.com/jQuery.parseHTML/

str = "hello, <b>my name is</b> jQuery.",
  html = $.parseHTML( str ),
  nodeNames = [];

// Gather the parsed HTML's node names
$.each( html, function( i, el ) {
  nodeNames[ i ] = "<li>" + el.nodeName + "</li>";
});

Irgendetwas stimmt nicht mit Ihrem Ajax in der Geige

http://jsfiddle.net/hcrM8/5/

var html= '<!DOCTYPE html><head><title><\/title><link href="../css/popup.css" rel="stylesheet" /><\/head><body><ul><li><a class="disabled" id="link">content<\/a><\/li><\/ul><\/body><\/html>';
            h = $.parseHTML(html);
            $('#data').text(h);
            $('#wtf').html($(h).find('#link').text());
3
Rizwan Mumtaz

Warum verwenden Sie nicht einfach die Lademethode?

$( "#wtf" ).load( "/echo/html #link" );

Oder hier ist Ihre Geige repariert und funktioniert:

http://jsfiddle.net/hcrM8/4/

1
dave

Alle Antworten deuten nicht auf das eigentliche Problem hin, jQuery scheint das head- und body-Tag zu ignorieren und erstellt ein Array von Knoten. Was Sie normalerweise wollen, ist, extrahieren Sie den Körper und analysieren Sie ihn.

Schauen Sie sich diese hilfreiche Antwort an, ich möchte seine Arbeit nicht kopieren: https://stackoverflow.com/a/12848798/2590616 .

1
RiZKiT

Ich hatte das gleiche Problem und es wurde behoben, den angeforderten HTML-Code in nur einem Containerelement einzukapseln.

Schlechtes Beispiel:

<a href="link">Linkname</a>
<p>Hello world</p>

Jquery konnte dieses Element nicht in ein Element konvertieren, da ein einzelner Elementbaum konvertiert werden soll. Aber die haben keinen Container. Folgendes Beispiel sollte funktionieren:

Richtiges Beispiel:

<div>
    <a href="link">Linkname</a>
    <p>Hello world</p>
</div>
1
wmwmwm

Ich bin mit dem gleichen Problem konfrontiert, und es liegt nicht daran, dass Sie etwas falsch machen.

dies liegt daran, dass für das "link" -Tag keine innerHTML zurückgegeben werden soll. Es wird in jquery explizit ausgeschlossen. Sie finden einige, in denen diese Zeile steht: 

rnoInnerhtml = /<(?:script|style|link)/i,

Dieses Tag in HTML soll eine Verknüpfung zu einem externen Stylesheet herstellen.

0
ZMs