jquery问题 - 根据旋转横幅中的活动图像添加元素

时间:2010-03-21 15:55:53

标签: jquery image rotation addclass

编辑: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">&nbsp;</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); 
            }
        });
    }
});

1 个答案:

答案 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