2012-01-04 50 views
2

我在ul >li中显示来自数据库的组的名称,它的参数是<div>,它最初是隐藏的。现在使用jQuery我只想切换<div>,但同一时间想隐藏所有其他人。深入查询选择器

我试过下面的代码,但它在jQuery 1.7中不起作用。任何人可以帮助我如何使用.not.filter,同时选择所有以“组”或其他解决方案开始的所有div?

$("#popupContact").delegate("ul.horizontal_lists li a", "click", function() { 
    var target_id = $(this).attr('id'); 
    target_id = "divOf" + target_id; 
    $('#' + target_id).slideToggle("slow"); 
    $('[id^="divOf"]'.not(this)).hide(); 
} 
+0

如果可能的话,请做一个小提琴,http://jsfiddle.net – Diode 2012-01-04 05:03:34

回答

1

我觉得你的主要问题之一是,你的搜索div的,但是除外this。由于this是锚,我不认为这会永远工作

$('[id^="divOf"]'.not(this)).hide(); 

我认为你在寻找这样的事情:

var target_id = $(this).attr('id'); 
target_id = "divOf" + target_id; 
$('#' + target_id).slideToggle("slow"); 
$('div[id^="divOf"]:not("#' + target_id + '")').hide(); 

最后一行将选择具有所有div ID开始divOf,而不是一个与target_id一个ID,并隐藏他们

0

你也应该开始使用ondelegate一直在jQuery的1.7 deprecated

$("#popupContact").on("click", "ul.horizontal_lists li a", function() { 
    var target_id = $(this).attr('id'); 
    target_elem = $("#divOf" + target_id); 
    $('[id^="divOf"]').not(target_elem).hide(); 
    target_elem.slideToggle("slow"); 
} 
+0

注意,对于'。对参数()'是不是在相同的顺序为'.delegate()'(事件(s)参数先来)。 – nnnnnn 2012-01-04 06:09:32

+0

谢谢你..我错过了改变.. – 2012-01-04 06:32:53