jQuery不影响ajax调用后的元素

jQuery不影响ajax调用后的元素,jquery,css,ajax,Jquery,Css,Ajax,我在用buddypress和wordpress。我使用了一些jQuery和一些按钮来显示/隐藏基于类的某些表行。当按下分页按钮(如第2页或第3页等)时,buddypress使用ajax填充下一页的用户行 我试图在这个ajax完成后运行我的隐藏代码,以隐藏我想要的东西 function keepCatOnPaginate () { $ = jQuery; $('.pagination-links a').click(function() { console.log

我在用buddypress和wordpress。我使用了一些jQuery和一些按钮来显示/隐藏基于类的某些表行。当按下分页按钮(如第2页或第3页等)时,buddypress使用ajax填充下一页的用户行

我试图在这个ajax完成后运行我的隐藏代码,以隐藏我想要的东西

function keepCatOnPaginate () {
    $ = jQuery;

    $('.pagination-links a').click(function() {
        console.log('clicked');
        $(document).ajaxStop(function () {
            $(document).ready(function(){
                console.log('ajax stopped, hiding stuff');
                var id = $('#buddypress .nav-tabs li.active a').attr('id');
                console.log('#members-list tbody tr.'+id);
                console.log($('#members-list tbody tr.'+id));
                console.log($('#members-list tbody tr').not('.'+id));
                $('#members-list tbody tr.'+id).show();
                $('#members-list tbody tr').not('.'+id).hide();
            });
        });
    });
}
一切似乎都正常,控制台日志发生在正确的时间。我得到了最后两个控制台日志的jQuery元素列表,正如我所期望的那样。但是,最后两次调用actual.show()和.hide()都没有做任何事情。没有隐藏或显示任何元素。即使我将.hide()或.show()更改为类似.css('background','red'),仍然什么也没有发生

如果复制并粘贴console.log的输出(“#members list tbody tr.”+id);作为.hide()或.show()或其他任何内容的选择器,这些元素似乎不会生效


我看不出我做错了什么。任何帮助都将不胜感激。干杯。

这只是一个猜测,因为您忽略了您正在做的事情中更重要的部分(这里没有显示ajax调用,没有显示动态加载的内容,也没有显示HTML)

但是,我猜您正在进行一个ajax调用,然后尝试动态加载一些内容,在加载这些内容之后,您希望隐藏/显示一些内容

若是这种情况,那个么您可能应该将此代码放在ajax调用的成功处理程序的末尾,而不是放在
.ajaxStop()
处理程序中,当然也不是放在
$(document).ready()
处理程序中

为了进一步帮助您,我们需要查看您针对的标记和涉及的ajax调用,并了解您是否在动态插入任何HTML

此外,您还可以解释您试图用这段代码做什么。您是否正在尝试获取id值,然后将其用作类名

如果这里根本不涉及ajax,而您只需点击一个选项卡,那么您的代码应该如下所示:

$('.pagination-links a').click(function() {
    // get active id
    var id = $('#buddypress .nav-tabs li.active a').attr('id');
    // hide all except the one who's class matches the active id
    $('#members-list tbody tr').hide().filter('.' + id).show();
});

没有这样的函数来为dynamic添加此项。唯一的方法是,将css规则动态添加到主体中/创建新的样式表

例:

$(“”).text(#newId{宽度:20px;高度:30px;}”).appendTo(“head”);
ajaxStop()
不考虑在
success
回调中触发的代码。因此,当ajax请求本身完成时,将新内容注入DOM的代码仍在运行,因此
hide()
show()
调用在注入新内容之前运行


放一些东西来检查是否有新内容,或者将
hide
show
方法包装在
setTimeout

中,对您尝试执行的操作或运行的上下文解释太少。我们需要知道这是ajax操作的一部分吗?您正在动态加载内容吗?为什么在
.ajaxStop()
处理程序中有一个
$(document).ready()
呢?那只是最后的一个万岁通行证。我不知道我的代码为什么不工作,我想可能dom没有加载,包装到DocumentReady中可能会有所帮助。我不知道,有点迟钝,但我想我会试试。我放了很多上下文,告诉你ajax是从哪里来的,我的代码应该在每次ajax调用完成后运行。也许可以重读我的问题。@NickM-为什么不使用成功处理程序进行ajax调用?一定要删除
$(document).ready()
部分。是buddypress处理分页和ajax调用,我不想编辑它的核心文件。是的,我已经取消了准备通话。不过我想出来了,看看我的答案。谢谢你的帮助!
$("<style>").text("#newId { width:20px; height:30px; }").appendTo("head");