编辑:Per Slaks
$j('#banner-content img').each(function() {
var link = $j('#page-tabs li a.' + $j(this).attr('class'));
if ($j(this).is(':visible')) {
link.addClass('active');
} else {
link.removeClass('active');
}
});
我有一个旋转一系列三个图像的横幅。活动的有一个display:block,而不活动的有display:none。我正在尝试将活动图像的类与标记匹配,以便我可以向a标记添加“活动”类。在编写该功能时遇到一些麻烦。它为每个img元素添加了所有类,无论它们是否被显示......
html标记如下所示:
<div id="banner-area">
<div class="clearfix" id="promo-boxes-nav">
<ul id="banner-tabs">
<li>
<ul id="page-tabs">
<li><a class="t39" href="#">1</a></li>
<li><a class="t42" href="#">2</a></li>
<li><a class="t49" href="#">3</a></li>
</ul>
</li>
<li class="last"> </li>
</ul>
</div>
<div id="banner-content">
<img class="t39" src="http://localhost:8888/1.png" style="position: absolute; top: 0px; left: 0px; display: none; opacity: 0;">
<img class="t42" src="http://localhost:8888/2.png" style="position: absolute; top: 0px; left: 0px; display: block; opacity: 1;">
<img class="t49" src="http://localhost:8888/3.png" style="position: absolute; top: 0px; left: 0px; display: none;opacity: 0;">
</div>
</div>
当前形式的函数如下所示:
$j('#banner-content img').each(function() {
if($j(this).css('display','inline')) {
var bcClass = $j(this).attr('class');
$j('#page-tabs li a').each(function() {
if($j('#page-tabs li a').hasClass(bcClass)) {
$j(this).addClass(bcClass);
}
});
}
});
答案 0 :(得分:1)
$j(this).show()
将显示该元素
你的意思是
if($j(this).is(':visible'))
此外,在您的选择器中,您要编写$j(this)
,而不是$j('#banner-content img:visible')
。
最后,如果您创建一个单独的变量来保存<a>
元素,代码将更容易阅读,如下所示:
var link = $j('#page-tabs li a.' + $j(this).attr('class'));
if ($j(this).is(':visible'))
link.addClass('active');
else
link.removeClass('active');
您的问题是,您正在内部hasClass
电话中的所有链接上拨打each
。这将检查任何元素是否具有该类,而不仅仅是当前的类
您需要将其更改为if($j(this).hasClass(bcClass))
。
然而,您的代码不必要地复杂化,并且可以更简单地编写:
$j('#page-tabs a.'
+ $j('#banner-content img:visible').attr('class'))
.addClass('active);
此代码调用$j('#banner-content img:visible').attr
以查找可见<img>
元素的类,然后将该类直接放入jQuery选择器中。
请注意,您可能还想致电removeClass
。