为什么removeChild不删除元素?

时间:2019-10-01 16:04:51

标签: javascript jquery html css

我写了这个脚本,以便在网站上刊登广告。一整天都在努力。

这是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)“)”这个。而且它没有被删除。

控制台没有显示错误。

1 个答案:

答案 0 :(得分:1)

您的各种形式的声明:

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

这表示:“如果在DOM中找不到slider,请退出该功能。否则,请删除滑块并继续该功能。”

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

您可能只是想要:

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

...等等。


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