几个问题之前添加var
:
Juan Mendes' answer是正确的删除命令。如果不反向删除,JS不但效率低下,而且由于数组值不再有效,脚本崩溃的真正机会。如果效率低下的方式似乎只运行一次或两次,那只是运气。
此外,需要考虑嵌套节点,请注意下面代码中的额外检查。
代码在Opera, User JavaScript之外似乎对您有用的事实表明您正在使用的节点已通过javascript/AJAX页面添加。用计时器或类似方法补偿。
如果仍然遇到困难,链接到目标页面和后您正试图确切的CSS选择器。
请注意,querySelectorAll()
is compatible with Opera Mobile 11.5,这两个页面要么这样说,要么显示一个问号 - 这并不意味着它不兼容,只是Mozilla没有测试它(其他人有)。请注意,有潜在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);
这真的是一个很好的答案,但是这个函数doesn也不行。我尝试用一个匿名函数来包装它,然后用window.opera.addEventListener再次用指定的AfterScript事件包装它,但仍然不销毁元素。其中一个网站是http://endlessvideo.com/,CSS选择器是'div [style =“float:left;”] div [style =“margin-left:5px;”] div [style =“float:右键;“],div#addthis_button,div#uvTab,a [href * =”vdownloader.com“],[href * =”youtubedownloader.com“]',可在桌面上完美工作Firefox – user1263513 2012-03-13 07:17:38
您最后的代码评论是“搞砸了”。请编辑该问题以添加任何重要的代码。不要在这里使用'addEventListener'或'AfterScript',这就是计时器代码的用途。事实上,这个特定的代码可以在[Greasemonkey模式](http://www.opera.com/docs/userjs/examples/#greasemonkey)中正常运行。 ...最后,我不知道Opera Mobile是否支持多个选择器。首先尝试一下简单的东西,比如'deleteByCSS(“#addthis_button”,20);'。我没有看到任何iFrames,但是如果这些节点中的一些在一个中,请注意。 – 2012-03-13 07:35:27
我已经尝试了在UserJS和Greasemonkey模式下的答案中提供的每个函数组合。我非常怀疑Opera Mobile真的支持querySelectorAll()。作为一种替代方法,您如何看待这个问题:http://v.gd/ovd9UR正如您在演示中看到的那样,它确实正在讨论这个功能 – user1263513 2012-03-13 07:58:19