帮助添加带有jQuery的类

时间:2011-09-20 17:28:54

标签: jquery html css dom-manipulation

我正在尝试根据悬停的链接更改导航底部边​​框颜色,底部边框颜色应更改为与悬停链接的颜色匹配,当链接失去焦点或悬停时,导航底部边​​框应该返回它的原始颜色,下面是我的HTML和jQuery。

<nav>
            <ul class="<?php echo $ul; ?>">
                <li class="home"><a class="home" href="/">Home</a></li>
                <li class="letters"><a class="letters" href="/product/type/letters">Letters</a></li>
                <li class="business active"><a class="active business" href="/product/type/business">Business</a></li>
                <li class="cards"><a class="cards" href="/product/type/cards">Cards</a></li>
                <li class="gifts"><a class="gifts"href="/product/gifts">Gifts</a></li>
            </ul>
        </nav>

/ 的jQuery /

$('nav li a').hover(function(){
            var orginalClass = $(this).parent().parent().attr('class');
            $(this).parent().parent().attr('class', '');
            var classType = $(this).attr('class');
            $(this).parent().parent().addClass(classType);
        }, 
        function() {
            $(this).parent().parent().attr('class', '');
            $(this).addClass(orginalClass);
        });

4 个答案:

答案 0 :(得分:3)

问题是“originalClass”变量的范围。它位于第一个悬停函数的本地范围内,因此在第二个悬停函数中无法访问。

你应该做的只是添加和删除第二个覆盖第一个CSS类的CSS类。

答案 1 :(得分:0)

尝试以下

$('nav li a').each(function() {
  var savedClass = $(this).parents('nav').first().attr('class');
  $(this).hover(function() {
    $(this).parents('nav').first().attr('class', $(this).attr('class'));
  }, function() {
    $(this).parents('nav').first().attr('class', savedClass);
  });
});

小提琴:http://jsfiddle.net/9J7RS/

答案 2 :(得分:0)

var orginalClass='';   
$('nav li a').hover(function(){
    var ul = $(this).closest('ul');
    orginalClass = ul.attr('class');
    var classType = $(this).attr('class');
    ul.removeClass().addClass(classType);
}, 
function() {
    ul.removeClass().addClass(orginalClass);
});

答案 3 :(得分:0)

$('nav li a').hover(function(){
            var ul = $(this).closest('ul');                                              
            ul.data('originalClass', ul.attr('class') );             
            ul.removeClass( ul.data('originalClass') );             
            ul.addClass( $(this).attr('class') );
        }, 
        function() {
            var ul = $(this).closest('ul'); 
            ul.removeClass( $(this).attr('class') ); 
            ul.addClass( ul.data('originalClass') );
        }
);