Почему removeChild не удаляет элемент? - PullRequest
1 голос
/ 01 октября 2019

Я написал этот скрипт для размещения рекламы на веб-сайте. Работал над этим целый день.

Это код 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. Идея заключается в следующем: при первой попытке он удаляет элементы, а при второй - останавливает функцию. Но когда я вставлю этот последний элемент, он не будет удален. Идентификатор правильный, все правильно, но он не будет удалять элемент, поэтому я продолжаю получать одно и то же предупреждение снова и снова.

Кроме того, я узнал, что я получаю эту баннерную рекламу в двух местах. Когда у меня есть "var bannerRandom = document.querySelector (" # MainContent> div: nth-child (7) ");"это, это выглядит как "document.querySelector (" # MainContent> div: nth-child (6) ")" это, и когда у меня есть оба, это появляется как "document.querySelector (" # MainContent> div: nth-child(6) ")" это. И он не удаляется.

Консоль не показывает ошибок.

1 Ответ

1 голос
/ 01 октября 2019

Ваши различные утверждения в форме:

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

означают следующее: «Если slider не было найдено в DOM, выйдите из функции . В противном случае удалите ползуноки продолжите функцию. "

Это означает, что ваша функция завершит работу в первый раз, когда один из элементов, которые вы ищете, не существует. Так как он завершается, ни один из других элементов после него не проверяется. Это вряд ли то, что вы хотите сделать.

Возможно, вы просто хотели:

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

... и т. Д.


Обратите внимание, что выне помещайте ; в конце блока, присоединенного к оператору управления потоком, как if или else, поэтому я удалил его выше. (Это безопасно, потому что JavaScript игнорирует их; но это бессмысленно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...