1

私はGM_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'));


最初のものは正常に機能しますが、2番目のものは機能しません。何か案は?

4

3 に答える 3

7

検索可能な DOM ツリーDOMParser()に変換するために使用します。 また、から派生したものを検索/使用しようとする試みは、関数内で発生する必要があります。responseText
responseTextonload

次のようなコードを使用します。

GM_xmlhttpRequest ( {
    ...
    onload:     parseAJAX_ResponseHTML,
    ...
} );

function parseAJAX_ResponseHTML (respObject) {
    var parser      = new DOMParser ();
    var responseDoc = parser.parseFromString (respObject.responseText, "text/html");

    console.log (responseDoc.getElementsByTagName('div'));
    console.log (responseDoc.getElementById('result_0'));
}


もちろん、id を持つノードresult_0が実際に返された HTML に含まれていることも確認してください。(Firebug、Wireshark などを使用)

于 2012-11-20T05:53:08.213 に答える
4

getElementByIdHTML要素のメソッドではありません。ドキュメントノードのメソッドです。そのため、次のことはできません。

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

を再帰的に通過することで、DOM を検索する独自の関数を実装できますchildren。新しいブラウザーでは、このquerySelectorメソッドを使用することもできます。最小限の開発では、jQuery や sizzle.js (jQuery の背後にあるクエリ エンジン) などのライブラリを使用できます。

于 2012-11-20T06:21:05.350 に答える
-1

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();
于 2014-03-08T06:21:13.770 に答える