2013-05-01 93 views
0

我有jQuery的一点小毛病而被jQuery的变化CSS有点与它新手这里是我的问题:div嵌套

我想提出一个下拉面板菜单,我已经得到了下拉OK但需要影响div内嵌入div的背景图像,div被点击触发动作。即“.side_bar_top_text”是需要改变背景的div。

的jQuery:

<script type="text/javascript"> 
$(document).ready(function() { 
$('.side_bar_top').click(function(){ 
    if ($(this).attr('class') != 'active'){ 
     $('.side_bar .side_bar_panel', this).slideUp(); 
     $(this).next().slideToggle(); 
     $(this).removeClass('active'); 
     $(this).addClass('active'); 

    } 
    }); 
}); 
</script> 

HTML:

<div class="side_bar_top"><div class="side_bar_top_text">COMMERCIAL CONSTRUCTION</div></div> 
<div class="side_bar"> 
    <div class="side_bar_panel"> 
    /*the list of elements*/ 
    </div> 
</div> 

所有我需要做的是通过CSS改变side_bar_top_text的背景图像时,面板向上,反之亦然。 我试过各种方法,没有运气。 任何人都可以帮忙吗?

+2

'$('。side_bar .side_bar_panel',this)'永远不会工作。当你在'side_bar_top'内搜索这些元素,并在'side_bar'之前关闭那个元素时,它应该是'$(this).closest('。side_bar')。find('。side_bar_panel')' – Ohgodwhy 2013-05-01 16:19:13

+0

There是jQuery [这里](http://api.jquery.com/css/)中的一个css方法调用。你已经尝试了什么? – 2013-05-01 16:19:18

回答

0

会这样的事情能帮助你吗? http://jsfiddle.net/jgQx3/2/

CSS:

.side_bar_top { 
    background: url(path/file1.jpg); 
} 

.side_bar_top.active { 
    background: url(path/file2.jpg); 
} 

SCRIPT:

$(document).ready(function() { 
    $('.side_bar_top').on('click', function(){ 
    var $this = $(this); 

    $this.toggleClass('active'); 
    $this.next('.side_bar').slideToggle(); 
    }); 
}); 

HTML:

<div class="side_bar_top active"> 
    <div class="side_bar_top_text">COMMERCIAL CONSTRUCTION</div> 
</div> 
<div class="side_bar"> 
    <div class="side_bar_panel"> 
    /*the list of elements*/ 
    </div> 
</div> 

此功能已经不垮打开选项虽然。

+0

哈哈你是个天才,谢谢!! – john 2013-05-01 17:24:50

0

为了获得元素side_bar_top_text这是点击的元素的一个孩子,这样做:

$(this).find('side_bar_top_text'); 

要更改背景:

$(this).find('side_bar_top_text').css('background-image', '<your_image>'); 
0

在CSS:

.side_bar_top .side_bar_top_text{ 
    background:url(path-to-original-image.jpg); //whatever you want 
} 

.side_bar_top.active .side_bar_top_text{ 
    background:url(path-to-image.jpg); //whatever you want 
} 

但如果你有一个特定的图像为每个或其他原因在jQuery中做到这一点:

$(document).ready(function() { 
$('.side_bar_top').click(function(){ 
    $(this).siblings().removeClass('active'); 

    if ($(this).attr('class') != 'active'){ 
     $('.side_bar .side_bar_panel', this).slideUp(); 
     $(this).next().slideToggle(); 
     $('.side_bar .side_bar_panel', this).removeClass('active'); 
     $(this).addClass('active'); 

     $(this).find('.side_bar_top_text').css('background', 'url(path-to-image.jpg)'); 

    } 
    }); 
}); 

编辑:

在CSS中,你可以看到,我们覆盖的活动类的背景。原始图像在上面定义。 该方法需要jquery添加和删除点击活动类。

我加入这行到你的听众:

$(this).siblings().removeClass('active'); 

应主动删除了点击的元素的每一个兄弟。这应该会恢复您的原始图像。

+0

很好。我有它改变图像与CSS(jQuery将无法正常工作这jQuery方法是我已经尝试过),但与CSS方法我怎么得到它改变图像回到谷歌了? – john 2013-05-01 16:39:22

+0

我编辑了我的答案。 jQuery将在这方面工作,但如果它没有做到你想做的事情,那么这可能是你编写监听器的一个问题。检查您的控制台以查看是否有错误。 – 2013-05-01 16:47:25

+0

看起来类活动不会被删除。我编辑了我原来的帖子,以显示我现在使用的代码。有任何想法吗? – john 2013-05-01 17:08:18