Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Выполнить функцию при изменении класса тега (https://javascript.ru/forum/jquery/65372-vypolnit-funkciyu-pri-izmenenii-klassa-tega.html)

nvkz-delete 15.10.2016 11:54

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

dd_smol 15.10.2016 12:36

Создайте свое событие и вызывайте его каждый раз после добавления класса.
Что то как то так.
$('#elem').on('mainEvent', function ( e ) {
// Ваша функция.
});

$('#elem').addClass('mainClass').trigger('mainEvent');

dd_smol 15.10.2016 13:04

Ну или если очень заморочится то можно воспользоваться событием DOMSubtreeModified.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<style>.main { color: red; }</style>
	<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
	<script type="text/javascript">
		$(function () {
			$('#elem').on('DOMSubtreeModified', function (event) {
				if( $(this).hasClass('main') ) {
					this.style.fontSize = 30 + 'px';
				} else {
					this.style.fontSize = '';
				}
			});
		})
	</script>

</head>
<body>
	<div id="elem">Это текст в элементе #ELEM</div>
	<button onclick="$('#elem').addClass('main');">Кнопка add</button>
	<button onclick="$('#elem').removeClass('main');">Кнопка remove</button>
</body>
</html>

nvkz-delete 15.10.2016 16:47

DOMSubtreeModified - Event, как я понял его решили не поддерживать, так как он сильно нагружает процессор. В итоге я все же смог разобраться как работает MutationObserver, и он отлично подошел, но осталась всего 1 проблема. По всей видимости на сайте стоИт защита от ботов - проявляется это в виде того, что сайт и все его элементы якобы безостановочно многократно и моментально обновляются, что вызывает постоянные многочисленные срабатывания и от того многочисленные выполнения вложенной функции. Не знаю как предотвратить такие срабатывания... Если бы как-то поставить таймер с условием, что функция может отработать только 1 раз например в 3 секунды..
Может кто знает как такое реализовать?


Часовой пояс GMT +3, время: 19:43.