2013-12-18 30 views
1

我有三个文章标签,每个标签都有1个部分,我需要动画出现,即高度从0px到任何px。每篇文章都有一个ID,为每个人点击事件的最有效方式是什么,而不必为每个单独的ID编写单独的函数,即是否存在“获取点击文章的ID”类型方法?使用jQuery切换特定类[误导?]

感谢

+0

$(this).id?或$(this).get(0).id也许..应该在那里 – falstro

回答

2

这是我会做什么,

jQuery:

$('.art h1').on('click', function() { 
    $(this).parent().find('p').stop(true).slideToggle(); 
}); 

HTML:

<div class="art"> 
    <h1>Some article stuff</h1> 
    <p>text goes here</p> 
</div> 

小提琴:JSFIDDLE

如果你想让它滑动起来,只有一次一个开放的,那么你可以做一个小修改,像这样,

jQuery:

$('.art h1').on('click', function() {  
    $('.art p').slideUp(); 
    $(this).parent().find('p').stop(true).slideToggle(); 
}); 

小提琴:Only one active JSFIDDLE

+0

很好的答案非常感谢! :) – user3105607

+0

有一个后续问题,我怎么能让它没有注册每篇文章的部分内的任何点击,因为我有一个窗体里面,当点击时,导致整个事情再次崩溃。谢谢 – user3105607

+0

你能否提供一个jsfiddle让我看看结构? –

1

您可以用逗号将多个选择:

$('#id1,#id2,#id3').click(function() { 
    $(this).animate(...); 
}); 

...或者你可以添加class="something"每个元素,只是选择:

$('.something').click(function() { ... }); 
+0

如果点击任何文章,这不会显示所有文章的部分?或者逗号作为'ors'?感谢您的回答 – user3105607

+0

不,您将点击处理程序附加到每个选定元素。当这个处理函数被调用时,它的'this'被设置为实际被点击的元素。 – josh3736

0

使用类为click事件,而不是ids ..然后,您可以使用id或某些其他属性来标识要展开的文章。

$('.someClass').click(function() { 
      thisId = $(this).attr('id'); 

      $('#whereTheSectionsAre').find('.active').removeClass('active').next().slideUp(400); 
      $(thisId+'article').toggleClass('active').next().slideDown(400); 

      return false; 
     }); 
0

你可以在这里查看一些例子,主要是如果该ID是动态的:

http://jsbin.com/uzEkiQa/3/

第一种方法是在一个已经提出,但具有动态的ID:

$('div[id^="id_"]').text("Changed by regexep"); 

第二个如果你的搭配比较硬核使用过滤器:

var reg = new RegExp(/ id_ \ d + /);

$('div[id^="id_"]') 
    .filter(function(index, item) { 
    return reg.test(item.id); 
    }) 
    .text("Changed by filter and regexp"); 

选择后,你可以应用你想要的行为。检查JSBin玩耍。