いくつかの問題:
削除順序については、Juan Mendes の回答が正しいです。逆に削除しないと、JS が非効率になるだけでなく、無効な配列値が原因でスクリプトがクラッシュする可能性が高くなります。非効率的な方法が 1 回か 2 回機能するように見えた場合、それはただの運です。
さらに、ネストされたノードを考慮に入れる必要があります。以下のコードの追加チェックに注意してください。
コードがOpera の外で動作するように見えるという事実、User JavaScriptは、使用しているノードがページ javascript/AJAX によって追加されたことを示唆しています。タイマーなどで補正してください。
それでも問題が発生する場合は、ターゲット ページにリンクし、試行している正確な CSS セレクターを投稿してください。
querySelectorAll()
は Opera Mobile 11.5 と互換性があり、これらのページの両方にそう表示されているか、疑問符が表示されていることに注意してください。これは、互換性がないという意味ではなく、Mozilla がテストしていない (他の人が持っている) だけです。と の間には違いがある可能性があるため、2 つのページがあることに注意してください。document.querySelectorAll()
{element}.querySelectorAll()
すべてをまとめると、次のようなコードが機能するはずです。
function deleteByCSS (cssSelector, delayLoopMax, delayMilliSecs) {
//-- Use defaults, if not specified.
var delayLoopMax = delayLoopMax || 0;
var delayMilliSecs = delayMilliSecs || 300;
//console.log ("Args: ", cssSelector, delayLoopMax, delayMilliSecs);
var doomedElements = document.body.querySelectorAll (cssSelector);
if (doomedElements && doomedElements.length) {
//console.log ("Found!");
//-- Found the node(s); delete it/them.
for (var J = doomedElements.length - 1; J >= 0; --J) {
var doomedNode = doomedElements[J];
if (doomedNode) {
doomedNode.parentNode.removeChild (doomedNode);
}
}
}
else {
//-- Nodes not found. Wait for JS to add them, if specified.
if (delayLoopMax > 0) {
delayLoopMax--;
setTimeout (
deleteByCSS,
delayMilliSecs,
cssSelector, delayLoopMax, delayMilliSecs
);
}
}
}
この場合、20の初期追加パラメーターで使用します...
deleteByCSS ("*VALID* CSS selector", 20);