2014-01-08 59 views
0

我遇到了一些問題。我試圖知道該怎麼做,但是...什麼也沒有...我做錯了什麼,我不知道什麼...從JSON中提取HTML標記之間的值

我有一個AJAX請求。

我收到一些屬性的值。其中之一是用HTML裏面:

"<p>Title</p> 
<p>Category</p> 
<p>First p.</p> 
<p>Second p.</p>" 

我想獲得另一個變量「標題」和另一個變量的「類別」。另一個變量中的「第一個p」和「第二個p」。

我做了這樣的事情,但沒有發生。

tTitle = $(textThumb).find("p:nth-child(0)").html(); 
tCat = $(textThumb).find("p:nth-child(1)").html(); 
tText = $(textThumb).remove("p:nth-child(0)","p:nth-child(1)").html(); 

所有這些都變得沒有定義。

如果我打印textThumb和其他參數的其他值也行,就是在這裏,我不知道如何去想它

由於這個問題,。

+1

CSS指數是一個基礎的,所以你可能想'p:nth-​​child(1)'和'p:n-child(2)'。 – Ryan

+1

也,你要過濾,找不到。沒有父元素可以從中找到。 –

+0

問題是HTML還不是打印機,它在數組中。如果被打印不是問題,但我想首先分離變量和打印後的HTML。我嘗試了基於的,但沒有。 tTitle,tCat和tText未定義。 –

回答

0

可能有更好的方法來除了返回帶有html值的JSON之外,你可以去做任何你正在做的事情 - 也就是說,你需要做的是將一個父節點的字符串放入jQuery選擇器中。

$('<div><p>Hi</p><p>Hi Again</p></div>').find('p').eq(0).text() // 'Hi!' 

或者第n個孩子()選擇(這應該是從1開始)

$('<div><p>Hi</p><p>Hi Again</p></div>').find('p:nth-child(1)').text() // 'Hi!' 

在你的情況$('<div>'+textThumb+'</div>') ...

2

嘗試這樣:

var $p = $(textThumb).filter("p"), 
    tTitle = $p.eq(0).text(), 
    tCat = $p.eq(1).text(); 

最主要的是使用.filter()而非.find(),因爲後者將查找的後裔,但你希望是在頂層元素的元素。 「

」另一個變量中的「第一個p」和「第二個p」。

如果你的意思是你想從兩個這些段落的文字到相同的變量,那麼也許:

var tText = $p.slice(2).text(); 

演示:http://jsfiddle.net/g39Gm/

+0

這是行之有效的,現在瞭解過濾器和查找之間的區別。確實,p標籤是第一個元素。它是在一個div裏面,更好地使用find我可以想象嗎? –

1
var tree = $(textThumb); 
tTitle = tree[0].innerText; 
tCat = tree[1].innerText; 
tText = tree[2].innerText + tree[3].innerText 
+0

這只是定義tTile,其他則保持未定義。謝謝。我不知道這種方式。 –