次の HTML があるとします。
<!DOCTYPE html>
<html>
<head>
[include jQuery here]
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
</style>
</head>
<body>
<div class="commentline">
<div class="carrowholder">
<div class="ctoggle">Click to toggle</div>
<div class="arrowwrap">
</div>
</div>
<div class="commentholder">
<div class="commenttitle">
Title 1
</div>
<div class="commentbody">
Body 1
</div>
</div>
<div class="commentline">
<div class="carrowholder">
<div class="ctoggle">Click to toggle</div>
<div class="arrowwrap">
</div>
</div>
<div class="commentholder">
<div class="commenttitle">
Title 2
</div>
<div class="commentbody">
Body 2
</div>
</div>
</div>
</body>
</html>
この Javascript は動作します:
$('.ctoggle').click(function(e) {
$(this).closest('.commentline').find('.commentbody').toggle();
});
これが何をするかというと、そのクラスを持つ DOM の最初の要素.commentline
(コメントのすべての DIV の親) を見つけてから、そのクラスを持つ DOM ツリーのブランチのさらに下にあるすべての要素を見つけます。.commentbody
各コメント行にはコメント本文が 1 つしかないため、この場合は問題ありません。.commentbody
各DIVに複数の DIV がある場合は.commentline
、さらにどの DIV を指定する必要がありますか (.first()
または.find()
を再度使用するなど)。
すでに言及されている他の解決策がありますが、この種のアプローチは少し読みやすく、したがって保守しやすいと思います-しかし、それは私の意見です:O)