2013-12-18 32 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玩耍。