2017-01-15 43 views
2
<div class='logolink' data-msg='msg01'>lorem ipsum</div> 
<div class='logolink' data-msg='msg02'>lorem ipsum</div> 
<div class='logolink' data-msg='msg03'>lorem ipsum</div> 

<div class='msgt' id='msg01'>lorem ipsum</div> 
<div class='msgt' id='msg02'>lorem ipsum</div> 
<div class='msgt' id='msg03'>lorem ipsum</div> 

.msgt被隐藏。
我想要什么,例如,如果第一logolink点击:
- 隐藏所有msgt除了msg01
- 如果msg01是可见的 - 隐藏 - 反之亦然。隐藏除一个以外的所有div并切换那一个

JS

$('.logolink').click(function(){ 
    var a = $(this).data('msg'); 
    var b = $('#' + a); 
    $('.msgt:not(b)').hide(); 
    b.toggle(); 
}); 

不工作。

回答

3

你必须使用.not功能,在此背景下,

$('.logolink').click(function(){ 
    var a = $(this).data('msg'); 
    var b = $('#' + a); 
    $('.msgt').not(b).hide(); 
    b.toggle(); 
}); 

由于b是一个jQuery对象,它不能沿着一个字符串传递。

+1

非常感谢,解决了。 – bonaca

+0

@bonaca很高兴帮助! :) –

0
$('.logolink').click(function() { 
    var $item = $('#' + $(this).data('msg'); 
    $item.toggle(); 
    $item.siblings().hide(); 
}); 
+1

你能解释一下这段代码的作用吗?它与原始代码有什么不同?它为什么解决这个问题? – JJJ

+0

对于初学者,我组合了第一步和第二步(不太重要,但为什么要初始化一个额外的变量)。 $ item.toggle()与前面相同。 ())将会选择所有的兄弟姐妹(即除了目标元素以外的同一级别的div) –

+0

这很好,但**编辑答案**(在帖子下面有一个编辑链接)那里的信息。 – JJJ

相关问题