【问题标题】:Parsing HTML from a JSON String with jQuery使用 jQuery 从 JSON 字符串解析 HTML
【发布时间】:2011-08-30 09:09:43
【问题描述】:

我不知道我做错了什么,但我有一个 JSON 字符串:

jsonp443489({"content":"<!DOCTYPE html><html><head><title>Title</title></head><body><p>Hello World</p></body></html>"});

我需要解析它才能修改内容。比如,id想抓取&lt;p&gt;的内容。

现在,如果我这样做的话,在 jQuery 中:

console.log($(json.content).html());

它返回Title

如果我这样做:

console.log($('p',json.content));

它返回[],或者,一个空数组。

最后,如果我这样做: console.log($(json.content));

它返回[&lt;title&gt;​Title​&lt;/title&gt;​,&lt;p&gt;​Hello World​&lt;/p&gt;​]

这很好,但是我不能做.find() 或任何事情。因为我不知道 HTML 是什么,所以我不能使用$(json.content)[1]

有什么想法吗?

==UPDATE==

在研究了几个小时后,我决定尝试 XML。我的示例 XML 是:

<?xml version=\"1.0\" encoding=\"UTF-8\"?><doc><item>One</item><item>Two</item></doc>

它给了我同样的痛苦,然后它击中了我,它是一个 JS 对象,而不是一个字符串,而 jQuery 期待一个字符串。我去做了

$(JSON.stringify(json.content)).find('item')

瞧!我有一个包含两个项目的数组。我很兴奋,但是当我再次尝试使用 HTML 时(使用上面的 JSONP 返回 HTML sn-p):

console.log($(JSON.stringify(json.content)).find('p'));

我仍然得到一个空数组。快把我逼疯了……还有什么想法吗?

【问题讨论】:

  • 你能在这里更清楚地定义你的问题吗?
  • 我会尝试...但问题确实是,您如何从 JSON 字符串中解析 HTML :) 但不知道如何改写这个...
  • 仅供参考,这个JSON.stringify(json.content) 是不必要的。 json.content 已经是一个字符串 (XML)。如果您将字符串传递给JSON.stringify,它只会返回相同的字符串。也许您应该先阅读有关 JavaScript 对象和 JSON 的内容...
  • 不,它不会返回相同的字符串。在 JSFiddle 上抛出该 XML,发出 JSONP 请求,并按原样解析它 ($(xml).find('item'))。它不会工作。用JSON.stringify 转换它,然后把它传递进去。它会工作的。我做 JS 很长时间了,jQuery 也做了 4 年。如果答案很简单,只是因为我不懂 JS 对象和 JSON,请给我一个 JSFiddle 或 JSBin 链接,告诉我如何去做,而不是抨击我的 JS 知识。
  • 你是对的,它不是同一个字符串。 JSON.stringify 将在字符串的开头和结尾添加引号 "。所以你得到的是"&lt;?xml ...",而不是&lt;?xml ...。没有它,它仍然可以工作:jsfiddle.net/MYNVj 如果看起来像那样,我很抱歉,但我并不打算抱怨你的知识......

标签: javascript jquery html ajax json


【解决方案1】:

这里的 jsonp443489 是什么?为什么不只做 $.parseJSON ?

完成此操作后,您应该能够访问其中的内容,然后从该内容创建一个 jquery 对象并在其中进行搜索。

var json = $.parseJSON(jsoncontent); $(json.content).find('');// 或者你可以将它添加到dom并使用$('#id')搜索

【讨论】:

  • 那来自getjson。 :) 这就是 jsonp 请求返回的内容。您也不能将 var 设置为 Ajax 内容,因为它还不存在。
  • 糟糕,我把它读作 getjson 而不是 parsejson。让我试试。谢谢
  • 知道为什么“var json = $.parseJSON(json);”然后console.log(json)会返回null吗? JSON 应该格式正确...
  • @Oscar: json 已经是一个 JavaScript 对象,而不是字符串。不能将 JS 对象解析为 JS 对象。
  • 我知道,我只是觉得 jQuery 有一些魔力。我想这就是你建议的原因。
【解决方案2】:

可能有更好的方法,但这可行(检索p 元素):

$('<div />', {html: json.content}).find('p');

【讨论】:

  • 那行不通,不是吗?我的意思是,HTML 包含 DOCTYPE、head 等,并将其包装在 div 中似乎......淘气哈哈
  • @Oscar:无效标记将被删除。你最终会得到&lt;div&gt;&lt;title&gt;...&lt;/title&gt;&lt;p&gt;...&lt;/p&gt;&lt;/div&gt;。我同意它不漂亮,但请记住,您永远不会将 div 添加到页面的 DOM 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2012-12-31
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
相关资源
最近更新 更多