免责声明:
我知道这类问题以前曾在这里问过,但我似乎找不到。我已经尝试搜索一堆不同的$.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()
}

最佳答案

据我所见,问题是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()

10-06 09:23