从JSON中提取HTML标记之间的值

时间:2014-01-08 21:30:24

标签: javascript jquery arrays json object

我遇到了一些问题。我试着知道该怎么办,但......没事......我做错了什么,我不知道是什么......

我有一个给JSON的ajax请求。

我收到一些带有值的属性。其中一个是HTML内部:

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

我想在另一个变量中获得“Title”,在另一个变量中获得“Category”。另一个变量中的“第一个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 ,其他参数中的其他值也可以,这就是我不知道该怎么想的问题

谢谢,

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

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

答案 2 :(得分:0)

除了使用html作为值返回JSON之外,还有更好的方法可以解决你所做的事情 - 也就是说,你需要做的是将带有一个父节点的字符串放入jQuery选择器。

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

或使用nth-child()选择器(应从1开始)

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

在您的情况下$('<div>'+textThumb+'</div>') ...