jQuery插件没有应用于$ .ajax动态内容?

时间:2011-08-16 13:01:56

标签: javascript jquery ajax jquery-plugins

声明: 我知道之前已经问过这类问题,我似乎无法找到它。我试过搜索一堆不同的$.ajax dynamic + live()类型的东西,但无法找到解决方案,无论如何,这是问题所在。

问题:

我正在建立一个可以保存我的代码片段的网站。我通过$.ajax.从数据库中提取内容。以下是网站:InsanelyWeb.com选择框选项内容也是动态的。尝试选项 HTML > DOCTYPE > HTML4严格(因为这是目前唯一正在使用的。)

正如您所看到的,有一些静态内容可以应用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 个答案:

答案 0 :(得分:5)

据我所知,问题是 hightlight 函数是called just once(在window.load上)。

尝试在ajax回调函数中自己调用 SyntaxHighlighter.highlight()函数。

更新(详细说明):

SyntaxHighlighter.highlight()是突出显示页面上标记为SyntaxHighlighter源代码的所有元素的函数。

SyntaxHighlighter.all()只需为 window.load 事件注册highlight()函数。我认为在应用SyntaxHighlighter之前确保加载了DOM。

如果您不止一次致电SyntaxHighlighter.all(),它只会再次注册highlight()功能。因为您正在执行ajax请求,所以不会再触发 window.load 事件。因此,您可以直接致电SyntaxHighlighter.highlight()