【发布时间】:2017-09-10 06:53:53
【问题描述】:
我正在使用 J-Query Ajax。我想要做的是,我正在发送一个请求以获取我在 bitbaysolutions.com 上托管的页面的整个 html 数据。问题是,当我加载this URL 并输入document.getElementsByTagName("div"); 时,我会在控制台中获得 37 div 元素的列表。但是当我向同一个 URL 发送 ajax 请求并通过 $(response).find('div'); 过滤 div 元素时,我得到的 div 元素列表减少到 25 并且我需要类名 ._myresult 的 div 是失踪。当我简单地发送请求而不过滤它,并将结果作为console.log(response); 输出时,我得到了整个 html 数据,并且我需要获取的 div 元素存在于那里。当我尝试将该 div 过滤为$(response).find('._myresult')); 时,我得到的是:
[prevObject: n.fn.init(35), context: undefined, selector: "._myresult"]
context:undefined
length:0
prevObject:(35) [text, title, text, link, text, meta, text, link, text, link, text, script, text, script, text, script, text, div#login, text, div#signup, text, comment, text, div.fb-reg, text, comment, text, div._myresult, text, div#thanks, text, div#thanks_login, text, script, text]
selector:"._myresult"
__proto__:Object(0)
从上面的结果你可以看到那个过滤器的长度是0,甚至你可以看到div._myresult存在于html中,我可以不过滤就得到它。但是当我尝试提取时,我没有得到所需的元素。
我尝试过的 J-Query Ajax
$.ajax({
method:"get",
url: "http://www.bitbaysolutions.com",
complete : function(){},
success: function(response){
var data = response;
console.log(data);
//console.log($(data).find('div'));
//console.log($(data).find('._myresult'));
}
});
您可以访问此URL 并输入
document.getElementsByClassName('_myresult')或document.getElementsBytagName('div')以检查我需要的类以及那里存在的 div 元素的数量。注意:我在 iframe 的 chrome 扩展页面中显示了 https://www.bitbaysolutions.com 页面。喜欢:
<iframe src="http://www.bitbaysolutions.com" id="myiframe" style="width: 100%;height: 100%;position: fixed;top: 0;left: 0;border:none;overflow-y:scroll; "></iframe>和我发出跨源 Ajax 请求,这只能在扩展中实现。
结束一切,我需要通过 Ajax 请求获取类名为 ._myresult 的 div 元素。这就是我所需要的。
【问题讨论】:
-
显然页面通过运行脚本动态添加元素。 XHR/AJAX 不运行脚本。您必须将 URL 嵌入 iframe 并注入内容脚本以获取元素并通过消息发送回文本,或者尝试在下载的 html 的另一个位置找到您需要的数据(有时它可能在 json您可以解析出的对象)。
-
不,元素不是通过脚本添加的,它们已经存在了! @wOxxOm
-
嗯,一定是古怪的 jQuirk 的另一个怪癖。试试 DOMParser: $(new DOMParser().parseFromString(response, 'text/html')).find('div')
标签: javascript jquery html ajax google-chrome-extension