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

jQuery plugin not getting applied to $.ajax dynamic content?

本文关键字:ajax 动态 应用于 插件 jQuery      更新时间:2023-09-26

免责声明:我知道以前在这里问过这种类型的问题,但我似乎找不到。我试着搜索了一堆不同的$.ajax dynamic+live()类型的东西,但找不到解决方案,不管怎样,问题就在这里。

问题:

我正在构建一个可以保存代码片段的网站。我正在通过$.ajax.从数据库中提取内容。这是网站:InsanelyWeb.com的选择框选项内容也是动态的。尝试选项HTMLDOCTYPE>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()
}

据我所见,问题是highlight函数只调用一次(在window.load上(。

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

更新(详细说明(:

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

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

如果您多次调用SyntaxHighlighter.all(),它只会再次注册highlight()函数。因为您正在执行ajax请求,所以不再触发window.load事件。所以您可以直接拨打SyntaxHighlighter.highlight()