2012-02-14 2 views
1

Что я хочу сделать, это иметь «живую» функцию, которая контролирует существование имени класса, а если любое событие вызывает добавление этого имени в DOM, будет запущена другая функция.jQuery Живая функция «ничего»?

Как написать функцию, которая это делает?

+2

Почему бы вам просто не выполнить свою дополнительную функцию, если вы решите добавить этот класс? – MetalFrog

+0

http://stackoverflow.com/a/1950052/768510 предоставляет возможные решения, но я сомневаюсь, что это решает вашу проблему. –

+0

функция, которую класс объявления находится в плагине WordPress, который я не хочу изменять, поскольку мне нужно будет обновить его в будущем. –

ответ

1

Этот тип функциональности не существует в jQuery и не будет добавлен, потому что методы, необходимые для его реализации, обесцениваются браузерами. Источник: https://forum.jquery.com/topic/a-global-event-or-simple-callback-for-new-content-entering-the-page-specifically-for-applying-widgets-and-behaviour#14737000003041291

Однако на этом же посту есть упоминание о плагине, который делает это.

https://github.com/snesin/jcade

+0

Я думаю, что OP ищет класс, который добавлен, а не событие, добавленное dom. – Ktash

+0

Это то же самое, что и событие DOM Mutation, если класс не всегда добавляется методом addClass. Что происходит, когда класс появляется при добавлении нового элемента? –

+0

А, да, я просто смотрел на плагин, который выглядит так, что он поддерживает только «DOMContentInserted» и «DOMContentRemoved». Это должно быть событие Mutation (и, вероятно, нужно будет также проверить на вставку). – Ktash

1

У вас есть два варианта для прослушивания на имя класса.

  1. Запустить таймер и проверить новые элементы с этим классом на интервале. Если вы найдете новые элементы, активируйте функцию
  2. Слушайте то же самое событие, которое они прослушивают. Оттуда вы можете проверить наличие новых элементов, или вы можете предположить, что он запущен и запускает вашу функцию независимо.

Кроме этого, очень легко «подключиться» к другому элементу. В теории, если они не обертку своего кода в затворе, вы можете сделать следующее:

var _theirfunction = theirfunction; 
function theirfunction() { 
    // You function to override theirs 
    _theirfunciton(); // Run their code. Make sure to pass along the arguments 
    yourFunction(); 
} 

Хотя, когда они обновляются, вы должны были бы убедиться, что матч параметров, и имя функции является одинаковым , Это также подвержено проблемам, зависящим от того, как они выполняют свою функцию и как она называется. Вам нужно будет сделать apply, если это находится в определенном контексте.

Смежные вопросы