Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2019, 11:56   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Существующий узел DOM не возвращается в getElements

Здравствуйте.
У меня забавный случай. Есть область на сайте, которую нужно вырезать.
Это футер с копирайтом.
В браузерной консоли работает имитация JS типа
Код:
document.getEmementById('copyright').setAttribute('style','display:none')
Аналогичный код встроенный на страницу - не работает, потому что getElementById возвращает null.
Хотя тут же в консоли всё работает.

Как такое может быть, и как лечить ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 11.11.2019, 11:59   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Ваш JS не дожидается полной загрузки страницы.
p51x вне форума Ответить с цитированием
Старый 11.11.2019, 12:21   #3
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

не совсем по теме, для этого:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Код:
document.getEmementById('copyright').setAttribute('style','display:none')
есть
Код:
document.getEmementById('copyright').style.display = 'none';
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 11.11.2019, 12:22   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

p51x, мой JS на таймере висит
Страница полнрстью загружена.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 11.11.2019, 12:30   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Может из-за того, что опечатка в коде?
Смотрите
Код:
document.getEmementById('copyright').style.display = 'none';
у вас m вместо l
Вадим Мошев вне форума Ответить с цитированием
Старый 11.11.2019, 12:39   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Вадим Мошев, опечатка здесь, потому что я вводил текст сюда.
В браузере яб получил неизвестную функцию.
И да, вызов метода из таймера - не работает.
Вызов метода из консоли - работает
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 11.11.2019, 12:54   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Надо смотреть код, так мало что понятно. Пока могу сказать, что setTimeout не учитывает локальный контекст, он работает в глобальном контексте.
Покажите все варианты, которые работают, а также нерабочие варианты.

Зачем, кстати, вам по таймеру удалять элемент?

P. S. если удаляемый элемент вам больше точно никогда не пригодится, то лучше воспользоваться методом remove().
То есть, у вас это будет как-то так:

Код:
document.getElementById('copyright').remove(); // вызывается без параметром
Вадим Мошев вне форума Ответить с цитированием
Старый 11.11.2019, 14:23   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Покажите все варианты, которые работают, а также нерабочие варианты.
Работает код, размещённый вручную через инспектор, если внедрять на уже загруженную страницу.
Внедрённый код в страницу для её дальнейшей загрузки - не работает.
Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Зачем, кстати, вам по таймеру удалять элемент?
Это был как вариант на тот случай, если мой код действительно не дожидается загрузки страницы, и мало ли - наличие и содержимое блока мониторится из-вне.
Так не принципиально.
Я пошёл через CSS (у блока есть свой класс), сделал свой стиль:
Код:
<style>
.copyright {display:none}
#copyright {display:none}
</style>
Когда этот код был выгружен в браузер - в инспекторе подсветка синтаксиса показала, что некоторые латинские буквы заменены кириллицей.
Эдакий стрёмный вариант защиты копирайта. Наверное замена происходит при сохранении изменений.

Ввиду этого, был сооружён вот такой велосипед:
Код:
<div id="custom-content-deployment"></div>
<script>
var
	deployment=document.getElementById('custom-content-deployment'),
	arr=['c','o','p','y','r','i','g','h','t'];
if (deployment!=null)
	deployment.innerHTML='<style>.'+arr.join('')+'{display:none}</style>';
else;
</script>
Вот так работает.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 11.11.2019 в 14:26.
OmegaBerkut вне форума Ответить с цитированием
Старый 11.11.2019, 14:51   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Попробуйте выполнять ваши операции всё же после загрузки дома, то есть, пишите внутри обработчика события onload.
У вас это будет выглядеть примерно так:
Код:
window.onload = function() {
  // тут писать код
};
а то, судя по тому, что вместо элемента возвращается null, у вас операции выполняются до загрузки дом-дерева
Вадим Мошев вне форума Ответить с цитированием
Старый 11.11.2019, 15:10   #10
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Вадим Мошев, это всё понятно. То что я пишу здесь - это проблемные места. Так у меня там листинг на 100 строк. Там решается вопрос интеграции данных, и скрытие области копирайта пошло как дополнение.
У меня там всё вызывается в
Код:
document.addEventListener('DOMContentLoaded',function(){ /* здесь все мои действия */ })
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не возвращается управление из CreateWindowEx IRomanKozlov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.02.2013 15:00
Поиск - После условия if($ppp) возвращается false gunsoy PHP 1 26.06.2011 05:59
Строка возвращается без последнего символа sanaes Общие вопросы C/C++ 6 12.06.2010 15:22
Программа-кодировщик(или Морзе возвращается!) AsPeeD Помощь студентам 2 01.04.2008 18:41
обновление в блоге - Рассылка возвращается! Pblog Обсуждение статей 0 03.08.2007 21:56