Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 26.01.2016, 14:03   #1
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 293
По умолчанию Отследить появление DOM

Можно ли сделать так, чтобы при появлении (т.е. по мере загрузки страницы браузером, не при создании скриптом!!!) DOM с определённым классом или id выполнялась моя функция?
Мне нужно заменить всё содержимое (innerHTML) объектов с классом "abc" на определённые значения. Я могу написать window.onload, но тогда придётся ждать загрузки всей страницы. А можно ли сделать так, чтобы замена проводилась сразу после загрузки каждого DOM ?

Ну или на край, чтобы можно было написать код, который будет выполняться сразу при появлении DOM, что-то типа <span onload="MyFunc(this)"></span>
Чтобы не делать нагромождений типа <span id="MyDOM"></span><script>MyFunc(getElementById( 'MyDOM'));</script>

Последний раз редактировалось 7in; 27.01.2016 в 12:03.
7in вне форума Ответить с цитированием
Старый 26.01.2016, 14:16   #2
Вадим Мошев

 
Регистрация: 12.11.2010
Сообщений: 8,590
По умолчанию

ID может присутствовать только у одного элемента. Если планируете сделать таких элементов несколько, то придётся воспользоваться классом.

Я правильно понимаю, что вы хотите поменять innerHTML у каждого элемента с таким классом при его загрузке?

Попробуйте такой код
Код:
var T = document.getElementsByClassName("yourClass");

for (var i = 0; i <= T.length; i++) {
  T[i].onload = function () {
    this.innetHTML = "что-то своё";
  };
};

Последний раз редактировалось Вадим Мошев; 26.01.2016 в 14:19.
Вадим Мошев вне форума Ответить с цитированием
Старый 26.01.2016, 14:52   #3
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

Цитата:
Я могу написать window.onload, но тогда придётся ждать загрузки всей страницы.
DOMContentLoaded https://developer.mozilla.org/en-US/...MContentLoaded ($(document).ready в jQuery) нужен что ли?
Alex11223 вне форума Ответить с цитированием
Старый 26.01.2016, 16:00   #4
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 293
По умолчанию

Нет, нет, это всё не то... :-/

Alex11223, мне нужно выполнять код не когда загрузится ВЕСЬ документ, а сразу (моментально) после загрузки каждого объекта (span, div и пр).

Вадим, onload не пашет.
7in вне форума Ответить с цитированием
Старый 26.01.2016, 16:12   #5
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

Чем вам весь документ не нравится? DOMContentLoaded не ждет же всех картинок и т.п. как onload.
Alex11223 вне форума Ответить с цитированием
Старый 26.01.2016, 16:29   #6
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 293
По умолчанию

Да? Сейчас попробую, спасибо.
Но в идеале – всё же к отдельным объектам привязываться... есть такая возможность?
7in вне форума Ответить с цитированием
Старый 26.01.2016, 18:32   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,413
По умолчанию

Что то мне кажется у вас с логикой не лады, какой смысл менять сразу если это можно сделать на сервере.
come-on вне форума Ответить с цитированием
Старый 26.01.2016, 19:36   #8
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 293
По умолчанию

Логика такова, что это виджет.
7in вне форума Ответить с цитированием
Старый 26.01.2016, 20:25   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Логика такова, что это виджет.
Тогда нафига тебе за этим следить? Виджет вставляется либо эмбедом (старье), либо айфреймом (самое надежное), либо скриптом.
1 - явно не твое
2 - не важно ждать ли весь дом во фрейме или сразу играться
3
- если блоки твои, то надеюсь ты их не через innerHTML пихаешь?
- если чужие, то логично скрипт засунуть после необходимых блоков и обязать юзера это делать в соответствии с инструкцией
- если блоки подгружаются динамически, то заставь юзера триггерить функцию обновления, и выдай соответствующую ручку на это

Самостоятельно следить за изменением дом-структуры очень тяжелая по ресурсам задача.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 27.01.2016, 04:28   #10
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 351
По умолчанию

Пользуйтесь обзервером, он для вашей цели и создан:

https://developer.mozilla.org/en/doc...tationObserver
rlib вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DOM Voipp JavaScript, Ajax 2 25.09.2013 15:49
HTML - DOM exn Работа с сетью в Delphi 1 17.02.2013 11:23
Отследить появление новой записи в БД alekslep БД в Delphi 0 18.10.2010 13:38
Как отследить появление нового диска? 54rus Помощь студентам 13 10.02.2010 17:26
Дерево DOM fclmhooligan JavaScript, Ajax 1 24.11.2008 15:11


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS