1

在类型的响应中,application/x-javascript我在变量中选择所需的JSON部分。下面是JSON——

{
   "__ra":1,
   "payload":null,
   "data":[
      [
         "replace",
         "",
         true,
         {
            "__html": "\u003Cspan class=\"highlight fsm\" id=\"u_c_0\">I want this text only\u003C\/span>"
         }
      ]
   ]
}

从我从 Stackoverflow 获得的参考资料中,我可以data通过以下方式选择里面的内容 -

var temp = JSON.parse(resp).data;

但我的目标是只获得__html价值的文本部分,即I want this text only. 有人帮忙。

4

3 回答 3

2

首先,您必须访问您定位的对象:

var html = JSON.parse(resp).data[0][3]._html;

但是你想要的输出是我只想要这个文本

html变量不包含该文本,而是一些 html,其中您要查找的内容是跨度内的文本

如果您接受在您的项目中包含 jQuery,您可以通过这种方式访问​​该内容

var text = $(html).text();
于 2013-02-25T21:00:20.150 回答
1

首先,您需要更具体地使用该数据以获取所需的文本字符串:

var temp = JSON.parse(resp).data[0][3]['__html'];

接下来,您需要搜索该字符串以提取所需的数据。这在很大程度上取决于您得到的响应的规律性。在任何情况下,您都可能需要使用正则表达式来解析您在响应中获得的字符串。

在这种情况下,您试图获取<span>字符串中元素内的文本。如果您的所有回复都是这种情况,您可以执行以下操作:

var text = /<span[^>]*>([^<]*)<\/span>/.exec(temp)[1];

这非常具体地在一个不包含其他 HTML 标记的 span 标记的开始和结束中查找文本。

此处表达式中要查看的主要部分是([^<]*),它将捕获不是左尖括号的任何字符,<。这周围的一切都在寻找<span>具有可选属性的实例。这exec是您在temp字符串上执行以返回匹配项的方法,[1]它将为您提供第一个也是唯一的捕获(例如<span>标签之间的文本)。

您需要阅读有关RegExp的更多信息,以了解如何做更具体的事情(或在您的问题中提供有关您正在寻找的响应模式的更具体信息)。但是,如果您要进行此类工作(解析文本,查找模式和匹配项),通常非常值得阅读正则表达式,因为它们是一种非常简洁和强大的方法,如果一开始有点混乱.

于 2013-02-25T21:03:15.470 回答
1

把它们放在一起:

var html = JSON.parse(resp).data[0][3]._html;
var div = document.createElement("div");
div.innerHTML = html;
var text = div.textContent || div.innerText || "";

感谢@Tim Down 对跨浏览器innerHTML 的回答:JavaScript:如何从字符串中去除HTML 标记?

于 2013-02-25T21:16:21.530 回答