Jquery 加载Ajax之前添加类
在jQuery浏览器中显示Ajax加载的页面之前,我试图将一个类添加到该页面中包含的元素中。这是我的密码:Jquery 加载Ajax之前添加类,jquery,ajax,Jquery,Ajax,在jQuery浏览器中显示Ajax加载的页面之前,我试图将一个类添加到该页面中包含的元素中。这是我的密码: $("#landing li.nav4 a").live('click', function() { $("#landing").fadeOut('slow', function(){ $('#agency').load('assets/ajax/agency.html').fadeIn(function(){ $("#agency-main
$("#landing li.nav4 a").live('click', function() {
$("#landing").fadeOut('slow', function(){
$('#agency').load('assets/ajax/agency.html').fadeIn(function(){
$("#agency-main nav li.nav1 a").addClass("nav1-on");
});
});
return false;
});
此时发生的事情是加载页面,然后添加类,在加载类(背景图像)时会出现明显的“闪光”
您知道如何加载内容、添加类,然后按顺序添加fadeIn吗?您可以尝试在后台创建要与类关联的元素,然后在需要时插入它 像
el = $("#landing");
//fadeout el
//remove from html
//add class
//insert it back in
如果您可以在JSFIDLE上编写代码,thta将非常有用:)请叫我nutbar,但我讨厌在您只需要管理事件顺序的情况下破译一百万次回调:
$("#landing li.nav4 a").on('click', function(event) {
event.preventDefault(); // better than return false;
$agency = $('#agency'); // cache it since we use it twice
// fade out the landing div, and when that's done load agency.html into #agency
// presumably, #agency is already hidden
$("#landing").fadeOut('slow', function(){
$agency.load('assets/ajax/agency.html');
});
// add the class to the nav item
$("#agency-main nav li.nav1 a").addClass("nav1-on");
// fade #agency in
$agency.fadeIn();
});
请注意,您可以采取或放弃的其他2项建议改进:
我是一个jquerynoob,所以这更多是为了我自己的学习-为什么不呢
//make sure #agency is defaulted to display:none, or add a line to check this
$("#landing li.nav4 a").live('click', function() {
$('#agency').load('assets/ajax/agency.html', function() {
$("#agency-main nav li.nav1 a").addClass("nav1-on");
});
$("#landing").fadeOut('slow', function(){
$('#agency').fadeIn();
});
return false;
});
不清楚文档何时可以使用
“#agency main nav li.nav1 a”
(顺便说一句,这是一个过度合格的选择器!)来添加其类。这是始终可用的,还是仅在agency.html
内部可用?仅在agency.htmlSo内部可用?agency main nav li.nav1 a
仅在加载agency.html
后可用,但您希望addClass('nav1-on'))
在将agency.html
加载到#agency
之前,将其加载到它?是。如果这是不可能的话,也许会有一些烟雾和镜子?将fadeIn延迟到足以在浏览器可见之前添加类的时间?您可以使用$.ajax
。加载HTML,添加类,然后将其插入DOM中。另外:是否有可能这是过度设计的?jQuery不是模块化的(它是专门点击nav4a
,最终专门修改nav1a
。这可能是预期的结果,但不可重用!)。既然它是如此具体,为什么不直接返回agency.html和已经添加的类呢?是的,也许你是对的。我试图避免从标签中管理一堆removeClass,但无论如何我都必须这样做。谢谢大家。“#agency main nav li.nav1 a”
在agency.html中,因此必须先加载agency.html,然后才能将类添加到其中。唯一的缺点是,如果agency.html需要很长时间才能加载,他们可能会纳闷为什么单击后什么也没有发生。无法加载加载.gif…替换掉.live()(已弃用)并返回false。缓存创建的$(“#代理”)
对象。然后你会得到。。。几乎与我已经发布的内容相同。;-)不过,我确实更喜欢这篇文章中的事件顺序。我认为是同一件事,格雷格-我们发布了同一件事,尽管顺序略有不同,还有其他两个不同:)哦,你的文章有更多的换行:)