2013-02-19 66 views
11

の内側に、私はこの解析のhtml jqueryのを使用して、CDATAまたはJavaScript

<rss...> 
    <title> some title </title> 
    <content> 
     <![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!? ]]> 
    </content> 
</rss> 

のように見えるウェブサイトのフィードを取得しています、私はHTMLで表示されるCDATAの内容全体を必要としています。私はjquery 1.9.1を使用しています。$(xml).find('rss content').text()を使用してコンテンツ部分を取得すると、 は実際には<div>this tag is ignored<div>部分全体を無視します。 javascriptまたはjqueryを使用してCDATA内のすべてを取得する方法はありますか?

+0

CDATAはパーサーからデータを隠すためのもので、HTMLとして解析されません。あなたのhtmlがCDATAに隠されている理由を理解しようとしていますか?あなたはただそれをアヤックスできますか? –

+0

'text()'の代わりに 'html()'を使ってみましたか? – Stefan

答えて

6

マークアップはjQueryによってXMLとして解析されない可能性があります。 $.parseXML()呼び出す明示的に試してみてください。

var contentText = $($.parseXML(xml)).find("rss content").text(); 
1

jQueryのは、文字列からXML文書の構文解析せいぜいではありません。ブラウザのネイティブDOMパーサーを使用する方がよいでしょう。 jQueryは解析されたXML文書をよりうまく処理できます。それ以外の場合は、XMLのように奇妙な結果を出すように努力すると信じています。

$xml = $((new DOMParser).parseFromString(xml, "text/xml")); 

http://jsfiddle.net/ExplosionPIlls/2MJt9/

EDIT:他の回答に基づいて、$.parseXMLはおそらく、それは他のブラウザで動作するはずですので、良いオプションですが、以来、上記と同様の方法でそれを使用する必要がありますresultはjQueryオブジェクトではなくXMLドキュメントです。

$xml = $($.parseXML(xml)); 
+0

あなたはそうです、 '$ .parseXML()'の周りに '$()'を追加呼び出しすることを完全に忘れました。私は私の答えを更新しました、ヘッドアップのおかげで:) –

3

bottomline:

xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue 

ワーキングコードからこのスニペットは、XMLをロードするためのjQueryを使用した後(CDATAを含む)のコンテンツタグの第4出現

var req = new AjaxRequest(); 
req.setMethod("POST"); 
... 
req.loadXMLDoc(linkString, paramString); 
var htmlContent = req.getResponse().responseXML.getElementsByTagName('content').item(3).childNodes[0].nodeValue; 
0

テキストからの取得jQueryのCDATAは、childNodesデータの最初を取得することで取得できます。

!$.ajax(YOUR_URL,{ 
dataType: 'xml', 
success: function (dataR, textStatus, jqXHR){ 
var rrsobj = $(dataR).find('rss'); 
if(rrsobj){ 
    desc = $(rrsobj [0]).children('content'); 
    if(desc) 
    var txt = desc[0].childNodes[0].data; } 
}}); 

ここで、dataRはYOUR_URLから読み込まれ、txtにはCDATAの情報が含まれます。

関連する問題