Javascript &引用;getElementById不是函数;当试图解析AJAX响应时?

Javascript &引用;getElementById不是函数;当试图解析AJAX响应时?,javascript,xmlhttprequest,greasemonkey,getelementbyid,gm-xmlhttprequest,Javascript,Xmlhttprequest,Greasemonkey,Getelementbyid,Gm Xmlhttprequest,我正在运行GM\u xmlhttpRequest(在Greasemonkey脚本中)并将responseText存储到新创建的HTML元素中: var responseHTML = document.createElement('HTML'); ... onload: function() { responseHTML.innerHTML = response.responseText; } 然后我试图在responseHTML中找到一个元素: console.log(responseHTM

我正在运行
GM\u xmlhttpRequest
(在Greasemonkey脚本中)并将
responseText
存储到新创建的HTML元素中:

var responseHTML = document.createElement('HTML');
...
onload: function() { responseHTML.innerHTML = response.responseText; }

然后我试图在
responseHTML
中找到一个元素:

console.log(responseHTML.getElementsByTagName('div'));
console.log(responseHTML.getElementById('result_0'));

第一个很好,但第二个不行。有什么想法吗?

用于将
responseText
转换为可搜索的DOM树。
此外,搜索/使用从
responseText
派生的任何内容的尝试必须发生在
onload
函数中

使用如下代码:

GM_xmlhttpRequest({
...
onload:parseAJAX_ResponseHTML,
...
} );
函数parseAJAX_ResponseHTML(respObject){
var parser=newdomparser();
var responseDoc=parser.parseFromString(respObject.responseText,“text/html”);
console.log(responseDoc.getElementsByTagName('div');
console.log(responseDoc.getElementById('result_0');
}

当然,还要验证id为
result\u 0
的节点是否在返回的HTML中。(使用Firebug、Wireshark等)

用于将
responseText
转换为可搜索的DOM树。
此外,搜索/使用从
responseText
派生的任何内容的尝试必须发生在
onload
函数中

使用如下代码:

GM_xmlhttpRequest({
...
onload:parseAJAX_ResponseHTML,
...
} );
函数parseAJAX_ResponseHTML(respObject){
var parser=newdomparser();
var responseDoc=parser.parseFromString(respObject.responseText,“text/html”);
console.log(responseDoc.getElementsByTagName('div');
console.log(responseDoc.getElementById('result_0');
}


当然,还要验证id为
result\u 0
的节点是否在返回的HTML中。(使用Firebug、Wireshark等)

getElementById
不是HTML元素的方法。它是文档节点的一种方法。因此,您不能:

div.getElementById('foo'); // invalid code

通过递归地遍历
子对象
,您可以实现自己的函数来搜索DOM。在较新的浏览器上,您甚至可以使用
querySelector
方法。对于最低限度的开发,您可以使用jQuery或sizzle.js(jQuery背后的查询引擎)之类的库。

getElementById
不是HTML元素的方法。它是文档节点的一种方法。因此,您不能:

div.getElementById('foo'); // invalid code

通过递归地遍历
子对象
,您可以实现自己的函数来搜索DOM。在较新的浏览器上,您甚至可以使用
querySelector
方法。对于最低限度的开发,您可以使用jQuery或sizzle.js(jQuery背后的查询引擎)之类的库。

不需要将响应存储在元素中,也不需要使用DOMParser()

只需将responseType设置为“document”,响应将被自动解析并存储在responseXML中

例如:

var ajax = new XMLHttpRequest();
ajax.open('get','http://www.taringa.net');
ajax.responseType = 'document';
ajax.onload = function(){
    console.log(ajax.responseXML); //And this is a document which may execute getElementById
};
ajax.send();

不需要将响应存储在元素中,也不需要使用DOMParser()

只需将responseType设置为“document”,响应将被自动解析并存储在responseXML中

例如:

var ajax = new XMLHttpRequest();
ajax.open('get','http://www.taringa.net');
ajax.responseType = 'document';
ajax.onload = function(){
    console.log(ajax.responseXML); //And this is a document which may execute getElementById
};
ajax.send();

他的代码与您的代码工作原理相同:意思是您的代码不工作的原因相同-getElementById不是HTML元素的方法,而是文档的方法。@slebetman:不,我的代码工作,而responseDoc是文档。。。你可以看到,它的工作原理是。(代码仅限于Firefox,这是一个
Greasemonkey
问题,没有问题)。啊,错过了Greasemonkey标签。对不起,谢谢,伙计们。我倾向于避免使用DOMParser,因为我在过去很难让它工作^ ^ ^但不管怎样,我明白为什么它现在不工作了。他的代码和你的代码工作起来一样:意思是你的代码不工作的原因相同-getElementById不是HTML元素的方法,而是文档的方法。@slebetman:不,我的代码确实有效,而responseDoc是一个文档。。。你可以看到,它的工作原理是。(代码仅限于Firefox,这是一个
Greasemonkey
问题,没有问题)。啊,错过了Greasemonkey标签。对不起,谢谢,伙计们。我倾向于避开DOMParser,因为我在过去很难让它工作,但不管怎样,我明白为什么它现在不工作了。