好的,我以前见过这个问题,但是所提供的解决方案都没有为我工作,所以我决定开始一个新的主题。我在HTML中显示了一些多个结果,我想分别对它们中的每一个使用jQuery函数。不幸的是,正如我所料,这些效果适用于所有div。下面是一些代码:
<div class="block_result">
<div class="details">
<div class="info">
{$$Title} {$$points} {$$rates}
</div>
<div class="navbar">
<div class='btn1'><a href="#d" class="fadingTab active" value="Tab1"><img src="some_png.png" alt=""></a></div>
<div class='btn2'><a href="#f" class="fadingTab" value="Tab2"><img src="some_png.png" alt=""></a></div>
<div class='btn3'><a href="#r" class="fadingTab" value="Tab3"><img src="some_png.png" alt=""></a></div>
</div>
<div class="contentContainer">
<div id="Tab1" class="contentWrapper">
<p class="contentText Tab1">some info</p>
</div>
<div id="Tab2" class="contentWrapper" >
<p class="contentText Tab2">some other info</p>
</div>
<div id="Tab3" class="contentWrapper" >
<p class="contentText Tab3">some other other info</p>
</div>
</div>
</div>
<div style="clear:both;"></div>
</div>
相同的HTML格式应用于每个结果。 这是jQuery代码,以及我想要使用的函数。我想根据所选的选项卡更改每个结果的内容。
// On page load
$(document).ready(function(){
//When a tab link is clicked
$("a.fadingTab").click(function() {
// remove the active class from all classes
$(".active").removeClass("active");
// add the active class to this tab
$(this).addClass("active");
// fade element with the class 'contentText' out
$(this).find(".contentText").fadeOut(700);
// wait for fadeout then hide element with class 'contentWrapper'
setTimeout(function(){ $(".contentWrapper").hide(); }, 700);
// find 'value' attribute value and show and fade elements
var content_show = $(this).attr("value");
setTimeout(function(){ $("#"+content_show).show(); }, 700);
setTimeout(function(){ $("."+content_show).hide().fadeIn(700); }, 700);
});
});
每次按下一个标签按钮,所有结果div都会发生变化。有任何想法吗?
答案 0 :(得分:0)
$this.find(".contentText").fadeOut(700);
不起作用
您的anchor
没有class="contentText"
作为其子女
将其替换为
$(".contentText").not( $this.attr('value') ).fadeOut(700);
这应该做
$("a.fadingTab").click(function () {
var $this = $(this);
// remove the active class from all classes
$(".active").removeClass("active");
// add the active class to this tab
$this.addClass("active");
var content_show = $this.attr("value");
// fade element with the class 'contentText' out
$(".contentText").show();
$(".contentText").not($('.' + content_show)).fadeOut(700);
});
<强> Check Fifddle 强>
答案 1 :(得分:0)
首先,您最好使用.delay()
而不是超时
所以
setTimeout(function(){ $(".contentWrapper").hide(); }, 700);
应该
$(".contentWrapper").delay(700).fadeOut();
其次,正如pXL所提到的,你正在使用选择器错误的方式。使用closest
,find
和filter
的组合可以从一个选择器导航到另一个选择器。