遍历最靠近元素的元素单击jquery

时间:2013-06-28 05:26:27

标签: javascript jquery html coffeescript traversal

我的html中有这种设置

<section class="grp">
  <ul class="normal">
    <li>Normal Thing <button class="toggle-advanced">toggle advanced</button></li>
  </ul>
  <ul class="advanced">
    <li>This is Advanced</li>
  </ul>
</section>
<h1>Another Thing</h1>
<section class="grp">
  <ul class="normal">
    <li>Normal Thing <button class="toggle-advanced">toggle advanced</button></li>
  </ul>
  <ul class="advanced">
    <li>This is Advanced</li>
  </ul>
</section>

如果点击ul中的按钮,如何切换“高级”ul.normal

我在coffeescript中尝试过这样的话

$('.normal').on 'click', '.toggle-advanced', (e) ->
  $(@).closest('.grp').siblings('.advanced').slideToggle();

5 个答案:

答案 0 :(得分:2)

因为jquery被标记为...使用jquery

$('.toggle-advanced').click(function(){
    $(this).parents('ul.normal').siblings('ul.advanced').toggle();
});

$('.toggle-advanced').click(function(){
    $(this).parents('.grp').find('ul.advanced').toggle();
});

除非你动态添加内容,否则它们应该有效。如果动态添加,请使用on()

$('.normal').on('click', '.toggle-advanced', function(){
   $(this).parents('.grp').find('ul.advanced').toggle();
});

答案 1 :(得分:1)

.advanced不是.grp元素的兄弟,它是父.normal元素的兄弟

$(@).closest('.normal').siblings('.advanced').slideToggle();

javascript等于

$('.normal').on('click', '.toggle-advanced', function(){
    $(this).closest('.normal').siblings('.advanced').slideToggle();
})

答案 2 :(得分:1)

你可以试试这个

$(".toggle-advanced").on('click', function(){

    $(this).closest(".normal").siblings('.advanced').slideToggle();

});

此代码基于jquery

答案 3 :(得分:1)

这应该有用。

$("ul.normal>li>button").click(function () {
   $(this).closest('.normal').siblings('.advanced').slideToggle();
});

工作示例:http://jsfiddle.net/riri78/dQcFE/

答案 4 :(得分:1)

在Jquery中,您可以使用兄弟函数来获取所需的元素。

试试这个:

$('.toggle-advanced').click(function() {
  $('this').parent().siblings().toggleSomething()
});

兄弟姐妹返回给定元素的所有兄弟姐妹,在您的情况下,它将始终返回“高级”ul。