Плагин jQuery не применяется к динамическому контенту $ .ajax? - PullRequest
3 голосов
/ 16 августа 2011

Отказ от ответственности: Я знаю, что этот тип вопроса задавался здесь раньше, но я просто не могу его найти. Я пытался найти кучу разных вещей типа $.ajax dynamic + live(), но все равно не могу найти решение, вот проблема.

Проблема:

Я создаю сайт, на котором я могу сохранить свои фрагменты кода. У меня есть содержимое, извлеченное из базы данных через $.ajax. Вот веб-сайт: InsanelyWeb.com содержимое параметров в поле выбора также является динамическим. Попробуйте опции HTML > DOCTYPE > HTML4 Strict (поскольку это единственный, который работает сейчас.)

Как видите, есть статический контент, к которому применяется подключаемый модуль SyntaxHighlighter. Но когда я следую вышеупомянутым опциям выбора, и данные извлекаются из базы данных, он теряет плагин. Я предполагаю, что это потому, что контент динамический, и я не могу применить к нему материал. Это код, который у меня есть.

JQuery:

$('#labels').live('change', function() {
    getScripts();
});

$.ajax({
    url: './db_scripts/get_scripts.php',
    success: function( data ) {
        var dataObj = jQuery.parseJSON( data );
        $.each(dataObj, function() {
            $('#code').html( this.code );
        })
        highlighter(); //after success, initiates highlighter 
    },
});

function highlighter() {
    SyntaxHighlighter.all();
}

Вопрос:

Как применить плагин к динамическому контенту? Я пытался async: false, но я не думаю, что это решение. Большое спасибо за ваше время.


Решение:

Объясните (очень красиво) ниже:

function highlighter() {
    SyntaxHighlighter.highlight()
}

1 Ответ

5 голосов
/ 16 августа 2011

Насколько я вижу, проблема в том, что функция hightlight вызывается только один раз (на window.load).

Попробуйте вызвать SyntaxHighlighter.highlight () работает самостоятельно в функции обратного вызова ajax.

Обновление (уточнение):

SyntaxHighlighter.highlight() - это функция, которая выделяет все элементына странице, помеченной как исходный код SyntaxHighlighter.

SyntaxHighlighter.all() просто зарегистрируйте функцию highlight() для события window.load .Я думаю, что необходимо убедиться, что DOM загружен перед применением SyntaxHighlighter.

Если вы вызываете SyntaxHighlighter.all() более одного раза, он просто регистрирует функцию highlight() еще раз.Поскольку вы выполняете ajax-запрос, событие window.load больше не вызывается.Так что вы можете позвонить SyntaxHighlighter.highlight() напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...