2010-08-11 75 views
0

我有一组动态的标题和隐藏的div的想法,当用户点击一个标题就会切换的DIV下方显示/隐藏jQuery的动态选择显示格

的div都有一个id在形成“div_x”,其中x是动态生成的

我设法使用.each()来循环以div_开头的所有div,我可以分割id的x部分,但我不确定如何获取jquery得到每个标题显示/隐藏只有相关的其他div

$('#[id^=div_]').each(function(){ 

    exploded_id = this.id.split("_"); 
    id = exploded_id[2]; 

    $("#"+this.id).click(function() { 

     $("#div_body_"+id).slideToggle("slow"); 

    }); 

}); 

我确定有人能够指出这里的缺陷

+0

您还可以提供一些HTML来帮助可视化吗?还有什么问题?我在这里没有看到问题。你有错误吗?你是否点击标题,什么都没有发生? – spinon 2010-08-11 08:57:47

回答

2

你的选择是错误的,你不需要#在属性-开始-与选择器的前:

$('#[id^=div_]') 

应该是的,而不是以下:

$('[id^=div_]') 
$('div[id^=div_]') 

此外,您可以对整个集合应用点击处理程序,这里不需要每个()。例如:

$('div[id^=div_]').click(function(){ 
    var id = this.id.split("_").pop(); 
    $("#div_body_"+id).slideToggle("slow"); 
}); 
+0

完美!!!!!!!!!!!!!!!!!!!!! – Tim 2010-08-11 09:04:43

3

为什么不使用活动函数并选择使用类?这样,您就可以动态地添加用ajax任意数量的元素,然后采取相同的行为自动:

<div id="div_1" class="outer"> 
    <div class="body"> 
    </div> 
</div> 

<div id="div_2" class="outer"> 
    <div class="body"> 
    </div> 
</div> 

<div id="div_3" class="outer"> 
    <div class="body"> 
    </div> 
</div> 

然后使用:

$(function() { 
    $('.outer').live("click" function() { 
     $(this).find('.body').slideToggle("slow"); 
    }); 
}); 
+0

你的代码很好,除了这个事实,ids不能只是数字。 – Sarfraz 2010-08-11 09:02:01

+0

谢谢,现在已更正 – Richard 2010-08-11 09:06:43

+0

而现在+1也是如此:) – Sarfraz 2010-08-11 09:10:19