几个问题:
关于删除顺序,胡安·门德斯的回答是正确的。如果不反向删除,不仅JS效率低下,而且由于数组值不再有效而导致脚本崩溃的真正机会。如果这种低效的方法似乎能奏效一两次,那只是运气。
此外,需要考虑嵌套节点,请注意下面代码中的额外检查。
该代码似乎在Opera用户 JavaScript之外为您工作,这表明您正在使用的节点是由页面 javascript/AJAX 添加的。使用计时器或类似方法进行补偿。
如果仍然遇到困难,链接到目标页面并发布您正在尝试的确切 CSS 选择器。
请注意,querySelectorAll()
它与 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);