jQuery不影响ajax调用后的元素
我在用buddypress和wordpress。我使用了一些jQuery和一些按钮来显示/隐藏基于类的某些表行。当按下分页按钮(如第2页或第3页等)时,buddypress使用ajax填充下一页的用户行 我试图在这个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
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");