Вопрос по js / jQuery в админке Есть решение
Потихоньку изучаю как работает js и jQuery. В админке подключил .js файл и попробовал в него добавить такой код:
$(document).ready(function(){ $('#wa').addClass("test1"); $('#s-order-title').addClass("test2"); });
Т.е. хочу добавить классы к элементам.
Эта строчка корректно работает к элементу с id 'wa':
$('#wa').addClass("test1");
А эта строчка не добавляет класс к элементу с id 's-order-title':
$('#s-order-title').addClass("test2");
Как я понял, причина в том, что элемента "#s-order-title" (заголовок страницы заказа) в исходном коде страницы нет, он добавляется иным способом (как и я вся страница заказа).
---
Вопрос: как добавить класс к этому элементу?
9 ответов
Часть элементов подгружается отдельными запросами, поэтому ваш скрипт вероятно срабатывает, когда загрузилась основная страница, но еще нет нужного вам блока.
В итоге решил проблему перемещением JS кода из head-а в body через хук для страницы заказов.
UPD. Погуглил, подредактировал код, вроде заработало:
Это правильное решение задачи? Или есть более правильный вариант?
Ajax вызовов может быть много. Каждый из них будет вызывать ajaxCompete. Получается при каждом таком вызове будет исполняться ваш код, что не очень хорошо со всех точек зрения. Как вариант конечно пойдёт, но лучше посмотрите на MutationObserver.
https://developer.mozilla.org/...
Спасибо. Как раз искал то что искал. Почитаю.
Можно найти хук, который выводит что-нибудь именно на карточке заказа. Скажем, backend_order и выводить ваш js, меняющий #s-order-title по этому хуку, например, в область info подсовывать ваш js-код
Спасибо за ответ. Я как раз именно так проблему и решил, отписался об этом в ветке выше.
Очень даже интересно, многих вещей даже не знал.
Вот обёртка над Mutation Observer - функция, которая позволяет найти элемент, который может как уже быть в DOM, так и нет - https://jsfiddle.net/dxgt39cn/