Обнаружьте изменения содержания элемента с jQuery

Пакет SSIS подошел бы лучше всего, чтобы сделать передачу, потребуются буквально секунды для установки!

111
задан Elzo Valugi 25 November 2013 в 15:15
поделиться

8 ответов

Это события мутации .

Я не использовал API событий мутации в jQuery, но беглый поиск привел меня к этому проекту на GitHub. Я не знаю о зрелости проекта.

24
ответ дан 24 November 2019 в 03:05
поделиться

Невозможно, я считаю, например, есть событие изменения содержимого, но это определенно не x-browser

Должен ли я сказать, что невозможно без какого-то неприятного интервала в фоновом режиме!

-4
ответ дан 24 November 2019 в 03:05
поделиться

Попробуйте это, он был создан Джеймсом Падолси (JP здесь, на SO) и делает именно то, что вы хотите (я думаю)

http: // james .padolsey.com / javascript / monitoring-dom-properties /

10
ответ дан 24 November 2019 в 03:05
поделиться

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

см. Этот пост здесь, на SO:

как сделать -i-monitor-the-dom-for-changes

10
ответ дан 24 November 2019 в 03:05
поделиться

Браузер не будет запускать событие onchange для элементов

.

Я думаю, что причина этого в том, что эти элементы не изменятся, если не будут изменены с помощью javascript. Если вам уже нужно изменить элемент самостоятельно (а не пользователем), то вы можете просто вызвать соответствующий сопутствующий код одновременно с изменением элемента, например:

 $("#content").html('something').each(function() { });

Вы также можете вручную запустить событие, подобное этому:

 $("#content").html('something').change();

Если ни одно из этих решений не работает в вашей ситуации, не могли бы вы предоставить дополнительную информацию о том, чего вы конкретно пытаетесь достичь?

14
ответ дан 24 November 2019 в 03:05
поделиться

Попробуйте плагин LiveQuary. Кажется, работает на что-то подобное я делаю.

http://docs.jquery.com/plugins/LiveQuery

1
ответ дан 24 November 2019 в 03:05
поделиться

Часто простой и эффективный способ добиться этого - отслеживать, когда и где вы изменяете ДОМ.

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

В недавнем приложении мне не требовались немедленные действия, поэтому я использовал обратный вызов для функции handly load (), чтобы добавить класс к любым измененным элементам, а затем обновлять все измененные элементы каждые несколько секунд с помощью таймера setInterval.

$($location).load("my URL", "", $location.addClass("dommodified"));

Тогда вы можете справиться с этим, как хотите - например,

setInterval("handlemodifiedstuff();", 3000); 
function handlemodifiedstuff()
{
    $(".dommodified").each(function(){/* Do stuff with $(this) */});
}
1
ответ дан 24 November 2019 в 03:05
поделиться

Я знаю, что этому сообщению уже год, но я хотел бы предложить другой подход к решению для тех, у кого есть похожая проблема:

  1. Событие изменения jQuery используется только для пользователя поля ввода, потому что, если что-то еще манипулируется (например, div), эта манипуляция исходит из кода. Итак, найдите, где происходит манипуляция, а затем добавьте туда все, что вам нужно.

  2. Но если это невозможно по какой-либо причине (вы используете сложный плагин или не можете найти какие-либо возможности «обратного вызова»), то подход jQuery, который я бы предложил:

    a. Для простых манипуляций с DOM используйте цепочку и обход jQuery, $("#content").html('something').end().find(что угодно)....

    b. Если вы хотите сделать что-то еще, используйте jQuery bind с пользовательским событием и triggerHandler

     $("#content").html('something').triggerHandler('customAction' );
    
    $('#content').unbind().bind('customAction', function(event, data) {
     //Пользовательское действие
    });
     

Вот ссылка на обработчик триггеров jQuery: http://api.jquery.com/triggerHandler/

69
ответ дан 24 November 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: