从源代码中获取存储在变量中的元素

时间:2015-10-21 13:33:31

标签: javascript jquery javascript-events google-chrome-extension javascript-objects

我有这段代码:

chrome.runtime.onMessage.addListener(function(request, sender) {
  if (request.action == "getSource") {
    message.innerText = request.source;
  }
});

我需要从源代码中的元素中获取文本。例如,考虑具有以下元素的页面:

<a class="something">something goes here</a>

我需要使用JavaScript获取类'something'的文本。 request.source返回结构原样的源代码。

1 个答案:

答案 0 :(得分:0)

您应该能够将源代码转换为jQuery对象,并像往常一样使用它。

var requestedSource = request.source;
$(requestedSource).find('a.something').first().text();

这对我来说对jsfiddle进行了非常简单的测试。

请注意,如果您有多个具有类&#34;&#34;的某个锚元素,则可能必须使用$ .find()返回的任何内容。 (我只是用$ .first()来简化我的例子)。在这种情况下,您可以像数组一样遍历$ .find()的结果。

如果该解决方案不起作用,另一种(但更糟)的方法是将所请求的代码写入隐藏的div,然后从div运行$ .find()(尽管如果第一个解决方案不起作用,request.source本身可能出现问题,因此请检查其内容。

例如:

$('body').append('<div id="requestedSource" style="display: none;"></div>');

然后:

$("#requestedSource").append(request.source);
$("#requestedSource").find("a.something").first().text();

如果你经常重复这个请求,你也可以在你完成处理时通过调用$ .empty()来清空隐藏的div:

$("#requestedSource").empty();

为了获得最佳性能,您需要将所有内容存储在变量中并写入一次:

var hiddenRequestSource = '<div id="requestedSource" style="display: none;">';
hiddenRequestSource += request.source;
hiddenRequestSource += '</div>';

$('body').append(hiddenRequestSource);  

var myResults = $("#requestedSource").find("a.something").first().text();
$("#requestedSource").empty();