2010-12-10 14 views
0

Ich kann den XML-Feed direkt mit jQuery lesen, aber wenn ich das Rückgabe-XML-Dokument mit 'console.log' anzeige, zeigt das 'description' -Tag nur '# cdata-section' in der Konsole, aber es ist in der Lage, vollständigen Inhalt anzuzeigen, wenn ich sie in den HTML-Code einfüge. Die Ausgabe ist ein vollständiger Inhalt eines Artikels, wie unter "Beispielinhalt".XML über jQuery lesen (Variable lesen)

Sample Content:

<p> line 1 line 1 line 1</p> 
<p> line 2 line 2 line 2</p> 
<img src='..' /> 
<p> ... ... </p> 

Nun, wenn ich es über Schnipsel mit jQuery abrufen, werde ich ein 'desc' Variable verwendet diese 'Beschreibung' Knoten (die Holding über Sample-Content) zu halten , aber wie lese ich wieviele 'p' oder 'img' Elemente in dieser 'desc' Variable?

Ich möchte das was Element innerhalb dieser 'desc' Variable bekommen, mein Ziel ist es, das IMG-Tag zu lesen. Gibt es eine Möglichkeit, es zu tun? Hinweis: vor dem Einfügen in den HTML-Text.

XML:

<channel>​ 
<title>​Property​</title>​ 
<link>​</link>​ 
<lastbuilddate>​Wed, 13 Oct 2010 23:50:51 GMT​</lastbuilddate>​ 
<generator>​FeedCreator 1.8.0-dev ([email protected])​</generator>​ 
<atom:link href=​"sample.com" rel=​"self" type=​"application/​rss+xml">​</atom:link>​ 
<item>​ 
    <title>​sample title​</title>​ 
    <description>​ 
    #cdata-section 
    </description>​ 
    <pubdate>Wed, 08 Dec 2010 23:04:25 GMT</pubdate> 
</item>​ 
<channel>​ 

jQuery:

$.ajax({ 
type: "GET", 
url: "http://feed6.xml", 
dataType: "xml", 
success: function(xml) { 
    console.log(xml); 
    $(xml).find('channel').each(function(){ 
    $(this).find('item').each(function(){ 
    var desc = $(this).find('description').text(); 
    console.log(desc); 
    }); 
}); 
} 
}); 

Antwort

2

versuchen diese .....

$(xml).find('channel').each(function(){ 
    $(this).find('item').each(function(){ 
     var desc = $(this).find('description').text(); 
     var newTag =document.createElement("div"); 
     newTag.innerHTML = desc; 
     var imgTag = newTag.getElementsByTagName("img"); 
    }); 
}); 
+0

@arkchong Hast du diesen Code ausprobiert? – Vivek

+0

Ja, ich denke, es funktioniert, aber lassen Sie gesagt, wenn ich mehrere img-Tag in den Inhalt bekam, wie soll ich die erste bekommen? – arkchong

+0

Wenn Sie mehrere Bild-Tags haben, dann newTag.getElementsByTagName ("img"), wird Array zurückgeben .... also iterieren Sie das einfach mit for-Schleife, Sie erhalten alle img-Tags ... und wenn Sie Tags außer img haben, dann können Sie diese Tags auf die gleiche Weise wie ich für IMG-Tag bekommen ..... Bitte akzeptieren Sie diese Antwort, wenn Sie finden, dass es für Sie arbeitet ... Danke – Vivek

0

Es scheint, wie das Problem in dieser Linie ist:

var desc = $(this).find('description').text(); 

Statt .text der Verwendung von() Am Ende dieser Zeile versuchen Sie .ht ml() und dann für den Tag suchen Sie wollen:

var desc = $(this).find('description').html(); 
var theImageYouwant = desc.find('img'); 
+0

kann nicht, es gibt mir einen Fehler zurück. – arkchong

0

$(this).find("description"); finden Sie eine jquery gewickelt XML-Fragment zurück.

Angenommen, der Inhalt ist nicht cdata-verpackt, können Sie jquery traversal genauso verwenden wie HTML.

e.g. $(this).find("description").find("p").each(function() { // whatever }); 

Wenn es cdata gewickelt wird, dann leider nicht jQuery keine html() wie Funktion für XML-Unterstützung, aber Sie können das Objekt jquery auspacken und dann die Beschreibung XML-Knoten rewrap. Etwas wie dieses:

var content = $($(this).find("description")[0].nodeValue);