在通过ajax加载的页面上运行jQuery代码

在通过ajax加载的页面上运行jQuery代码,jquery,ajax,Jquery,Ajax,我正在使用jQuery编写自己的降价脚本: function markdown(markdownable) { var bold = /\*\*(\S(.*?\S)?)\*\*/gm; markdownable = markdownable.replace( bold, '<span style="font-weight:bold">$1</span>' ); return markdownable; } $('.content').each(fun

我正在使用jQuery编写自己的降价脚本:

function markdown(markdownable) {

var bold = /\*\*(\S(.*?\S)?)\*\*/gm;
    markdownable = markdownable.replace( bold, '<span style="font-weight:bold">$1</span>' );

    return markdownable;
}

$('.content').each(function() {

    var markdownable = $(this).html(),
        content = markdown(markdownable);

    $(this).html(content);

});
函数标记(可标记){
var bold=/\*\*(\S(.*?\S)?)\*\*/gm;
markdownable=markdownable.replace(粗体,$1');
返回可标记;
}
$('.content')。每个(函数(){
var markdownable=$(this.html(),
内容=降价(可降价);
$(this.html(content);
});
这是一张工作票

问题是我希望这段代码在通过ajax显示的页面上生效。因此用户点击一个链接:

<a id="kwqe_show_vote_link" href="#">Show Box</a>

下面是该链接的jQuery代码:

$(document).on('click', 'a#kwqe_show_vote_link', function(e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    var $button = $(this);
    if ($button.data('disabled'))
        return false;
    if (kwqommunityEditorBoxCache.votes) {
        $('#kwqe_revisions_box').replaceWith(kwqommunityEditorBoxCache.votes);
        return false;
    }
    $button.data('disabled', 1);
    var post = $button.data('post');
    var $now = $('#kwqe_revisions_box').html();
    $('#kwqe_revisions_box').empty().append('<p>' + kwqommunityEditorBoxData.loading
            + '</p>');
    $.ajax({
        data: {action: 'print_box', kwqe_post: post}
    }).done(function(data) {
        if (data && $('#kwqe_revisions_box').length) {
            $('#kwqe_revisions_box').replaceWith(data);
            kwqommunityEditorBoxCache.votes = data;
        } else {
            $('#kwqe_revisions_box').html($now);
            kwqommunityEditorBox.errorMsg('no_ajax_msg', '#kwqe_vote_box_feedback');
        }
        $(document).trigger('kwqe_print_box');
    }).fail(function() {
        $('#kwqe_revisions_box').html($now);
        kwqommunityEditorBox.errorMsg('no_ajax_msg', '#kwqe_vote_box_feedback');
    });
});
$(文档)。在('click','a#kwqe_show_vote_link',函数(e){
e、 预防默认值();
e、 停止即时复制();
var$按钮=$(此按钮);
如果($button.data('disabled'))
返回false;
if(kwqommunityEditorBoxCache.vows){
$(“#kwqe_修订_框”)。替换为(kwqommunityEditorBoxCache.vows);
返回false;
}
$button.data('disabled',1);
var post=$button.data('post');
var$now=$('#kwqe_revisions_box').html();
$(“#kwqe_修订版_框”).empty().append(“”+kwqommunityEditorBoxData.loading
+“

”); $.ajax({ 数据:{操作:'print_box',kwqe_post:post} }).完成(功能(数据){ if(数据和$('#kwqe_修订框')。长度){ $(“#kwqe_修订_框”)。替换为(数据); kwqommunityEditorBoxCache.vows=数据; }否则{ $('kwqe_revisions_box').html($now); errorMsg('no_ajax_msg','kwqe_vote_box_feedback'); } $(document).trigger('kwqe_print_box'); }).fail(函数(){ $('kwqe_revisions_box').html($now); errorMsg('no_ajax_msg','kwqe_vote_box_feedback'); }); });

如何确保jQuery标记代码在用户单击链接时显示的页面上正常工作?

不确定我是否正确理解了所有内容,但在向框中添加新数据时,您可以尝试类似的操作

编辑:这里我列出了我能想到的所有可能的方法

  • 在DOMSubTreeModified事件中:某些浏览器不喜欢此事件。因为它被标记为不推荐

    $("#kwqe_revisions_box").on("DOMSubtreeModified", function() {
    $('#kwqe_revisions_box').find('.content').each(function() {
    
      var markdownable = $(this).html(),
      content = markdown(markdownable);
      $(this).html(content);
    
      });
    });
    
  • 另一种方法是,在锚点上添加另一个单击处理程序,使用setTimeout~500毫秒。然后执行标记

    $(document).on('click', 'a#kwqe_show_vote_link', function(e) {
    ...do you ajax stuff here, as it is now
    
    }).on('click',function(){
    setTimeout(function(){
      $('#kwqe_revisions_box').find('.content').each(function() {
    
      var markdownable = $(this).html(),
      content = markdown(markdownable);
      $(this).html(content);
    
      });
    });
    
    },500);
    });
    
  • ajax done()处理程序中的第三种方式:


    我只是将它添加到JS文件中,但它不起作用。我可以再次解释我的问题。当用户单击链接时,我需要在通过ajax加载的页面上使用降价代码。你还有其他线索吗?我可以试试吗?谢谢你抽出时间!内容类选择器是否位于kwqe_修订版_框内?在返回缓存数据后,您是否也运行了上面的代码,该缓存数据位于$('#kwqe_revisions_box').replaceWith(kwqommunityEditorBoxCache.vots);。内容类位于kwqe_修订版_框内。我不知道您在返回缓存数据后运行上述代码是什么意思。我只是在JS文件的末尾添加了上述代码。请指教!我编辑了答案。我相信这个代码应该可以做到。我在两个地方运行了降价代码。一个位于.done()处理程序中,另一个位于返回缓存数据的处理程序之上。非常感谢您的耐心等待。难道没有办法使降价代码独立于ajax代码吗?我可以看到您已经在ajax代码中包含了降价。问题是ajax代码是Wordpress插件的一部分,会自动更新。因此,理想情况下,我需要在自己的JS文件中单独添加标记代码。我们还能做到这一点吗?如果我没有解释好,请告诉我。
    $(document).on('click', 'a#kwqe_show_vote_link', function (e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    var $button = $(this);
    if ($button.data('disabled'))
        return false;
    if (kwqommunityEditorBoxCache.votes) {
        $('#kwqe_revisions_box').replaceWith(kwqommunityEditorBoxCache.votes);
        $('#kwqe_revisions_box').find('.content').each(function () {
    
            var markdownable = $(this).html(),
            content = markdown(markdownable);
            $(this).html(content);
    
        });
        return false;
    }
    $button.data('disabled', 1);
    var post = $button.data('post');
    var $now = $('#kwqe_revisions_box').html();
    $('#kwqe_revisions_box').empty().append('<p>' + kwqommunityEditorBoxData.loading
        + '</p>');
    $.ajax({
        data: { action: 'print_box', kwqe_post: post }
    }).done(function (data) {
        if (data && $('#kwqe_revisions_box').length) {
            $('#kwqe_revisions_box').replaceWith(data);
            kwqommunityEditorBoxCache.votes = data;
            $('#kwqe_revisions_box').find('.content').each(function () {
    
                var markdownable = $(this).html(),
                content = markdown(markdownable);
                $(this).html(content);
    
            });
        } else {
            $('#kwqe_revisions_box').html($now);
            kwqommunityEditorBox.errorMsg('no_ajax_msg', '#kwqe_vote_box_feedback');
        }
        $(document).trigger('kwqe_print_box');
    }).fail(function () {
        $('#kwqe_revisions_box').html($now);
        kwqommunityEditorBox.errorMsg('no_ajax_msg', '#kwqe_vote_box_feedback');
    });
    });
    
    $("#kwqe_revisions_box").on('change',function(){
    $('#kwqe_revisions_box').find('.content').each(function() {
    
              var markdownable = $(this).html(),
              content = markdown(markdownable);
              $(this).html(content);
    
              });
    });