2016-09-13 4 views
2

私は非常に単純な問題がありますが、解決策を見つけることができません。私は.parent()、.next()、.find()を使うことについて多くの言及を見つけましたが、それらのどれも私が期待していることをしていません。 Ether同じクラス名のすべてのdivは、同時に展開したり崩壊したり、まったく動かない。divが同じコードブロックにない場合、jqueryは同じクラスのdivを切り替えます。

私がここで探しているのは、同じクラス名を使用し、クリックしたものだけを展開して折りたたむことです。私はそれが1でそうしたいときは、それらのすべてを拡張し、崩壊する

$(".expand").click(function() { 
    $(".extras").toggle(); 
}); 

HTML::

<table> 
    <tr> 
    <td><div class="expand">More Details</div></td> 
    <tr/> 
    <tr> 
    <td> 
     <div class="extras" style="display:none;"> 
     <table> 
      <tr><td>Some Data</td></tr> 
     </table> 
     </div> 
    </td> 
    </tr> 
    <tr> 
    <td><div class="expand">More Details</div></td> 
    <tr/> 
    <tr> 
    <td> 
     <div class="extras" style="display:none;"> 
     <table> 
      <tr><td>Some Data</td></tr> 
     </table> 
     </div> 
    </td> 
    </tr> 
</table> 

jQueryの私はこのような何かを持っています"expand" divでクリックすると、下の "extras" divが表示されます。

+0

誰もが行動のこの種のクラスを使用する理由はわかりません。 'id'はあなたの友人です。 – Tibrogargan

+0

@ RokoC.Buljanあなたはクラスを繰り返し、非一意性に対処するために余分なコードを追加しても構いませんか?本当に反パターンのビットと思われる – Tibrogargan

+0

私は一意ではない何かのためにクラスを使用する原因となるために、私は一意である必要があります。それはforループにスローされます。 – jAC

答えて

2
$(".expand").click(function() { 
    $(this).closest("tr").next("tr").find(".extras").toggle(); 
}); 

手段:

$(this)   // Start from here 
.closest("tr") // go up 
.next("tr")  // go to next 
.find(".extras") // find element 
.toggle();  // do tha thing 
+0

ええ、私はそれが何か簡単だと分かっていました。私はjQueryに慣れていて、これで数時間は苦労しています。ありがとうございました!これはうまくいった。私は一度それが私にできるようにそれをマークします:)素晴らしい説明btw。 – jAC

+0

@jacよろしくお願いします! –

関連する問題