【问题标题】:Why doesn't the removeChild remove the element?为什么 removeChild 不删除元素?
【发布时间】:2019-10-01 16:04:51
【问题描述】:

我写了这个脚本来删除网站上的广告。一整天都在努力。

这是JS代码:

var timer = setInterval(deletor, 1);

function deletor() {
    timer;
    var slider = document.querySelector("#slider-con");
    var bannerTop = document.querySelector("#MainContent > div:nth-child(2)")
    var bannerMiddle = document.querySelector("#MainContent > iframe");
    var bannerRandom = document.querySelector("#MainContent > div:nth-child(7)");
    var bannerRandom2 = document.querySelector("#MainContent > div:nth-child(6)");


        if (slider == undefined) {
            return false;
        } else {
            slider.parentNode.removeChild(slider);
        };

        if (bannerTop == undefined) {
            return false;
        } else {
            bannerTop.parentNode.removeChild(bannerTop);
        };

        if (bannerMiddle == undefined) {
            return false;
        } else {
            bannerMiddle.parentNode.removeChild(bannerMiddle);
        };

        if (bannerRandom == undefined) {
            return false;
        } else {
            bannerRandom.parentNode.removeChild(bannerRandom);
        };

        if (bannerRandom2 == undefined) {
            return false;
        } else {
            bannerRandom2.parentNode.removeChild(bannerRandom2);
        };

};

现在,如您所见,它首先获取值,然后执行 if 语句。这背后的想法是:在第一次尝试时,它会删除元素,而在第二次尝试时,它会停止该功能。 但是当我插入最后一个元素时,它不会删除它。 ID 是正确的,一切都是正确的,但它不会删除元素,所以我不断收到相同的警报。

另外,我发现,我在两个地方看到了这个横幅广告。当我有 "var bannerRandom = document.querySelector("#MainContent > div:nth-child(7)");"这个,它显示为 "document.querySelector("#MainContent > div:nth-child(6)")" 这个,当我有两个时,它显示为 "document.querySelector("#MainContent > div:nth-child (6)")"这个。而且它没有被删除。

控制台没有显示错误。

【问题讨论】:

  • “在第一次尝试时,它会删除元素,在第二次尝试时,它会停止函数。” 这没有任何意义。你说的这些“尝试”是什么?
  • 请注意,Java 和 JavaScript 是完全不同的编程语言。我和另一个用户合作删除了不相关的java 标签并添加了相关的javascript 标签。
  • 哦,对不起!在输入 Java(意思是 Javascript)> T.J. 时可能会立即选择 Java。我指的是 if 语句及其作用。

标签: javascript jquery html css


【解决方案1】:

您在表格中的各种陈述:

if (slider == undefined) {
    return false;
} else {
    slider.parentNode.removeChild(slider);
};

意思是:“如果在 DOM 中找不到 slider退出函数。否则,移除滑块并继续函数。”

这意味着您的函数将在您要查找的元素第一次不存在时终止。由于它在那时终止,因此不会检查它之后的其他元素。这似乎不太可能是您想要做的。

你可能只是想要:

if (slider) {
    slider.parentNode.removeChild(slider);
}

...等等。


请注意,您不要将; 放在附加到流控制语句(如ifelse)的块末尾,这就是我在上面删除它的原因。 (这样做是无害的,因为 JavaScript 会忽略它们;但这毫无意义。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2012-08-31
    • 2016-04-30
    • 2013-06-21
    相关资源
    最近更新 更多