我正在尝试使用jquery显示/隐藏表的下两行。下面的代码显示了带有类的tr - quest_image,但不是类quest_text。
<table id="my_table">
<tr>
<td><img alt="Show/Hide" src="img.gif" class="ShowHide"></td>
<td>text 1</td>
</tr>
<tr class="quest_image">
<td colspan="2">hidden text 1</td>
</tr>
<tr class="quest_text">
<td colspan="2">hidden text 3</td>
</tr>
<tr>
<td><img alt="Show/Hide" src="img.gif" class="ShowHide"></td>
<td>text 2</td>
</tr>
<tr class="quest_image">
<td colspan="2">hidden text 4</td>
</tr>
<tr class="quest_text">
<td colspan="2">hidden text 2</td>
</tr>
</table>
<script type="text/javascript" src="../jquery/jquery/jquery-1.7.2.js"></script>
<script type="text/javascript">
// bind click event ONCE to the table
// not to every .ShowHide
$('#my_table').click(function(event){
// find where the click originated from
var trigger = event.target;
// if it has a class of "ShowHide"
// THEN toggle the next row
if(trigger.className == 'ShowHide')
{
// toggle away
$(trigger).closest('tr').next('.quest_text').toggle();
$(trigger).closest('tr').next('.quest_image').toggle();
}
});
</script>
为什么一个切换工作,而另一个切换不工作?
答案 0 :(得分:1)
next()
将返回紧邻的下一个元素。它不会选择具有匹配选择器的最近元素。您需要使用nextAll()
并将其限制为第一场比赛。
此外,jQuery 1.7具有.on()
,因此您可以删除复杂的类检查并直接将事件绑定到类。不要忘记将所有内容都包装在document.ready事件中。
$( function() {
$('#my_table').on( 'click', '.ShowHide', function() {
var $trigger = $( this );
$trigger.closest( 'tr' ).nextAll('.quest_text:first').toggle();
$trigger.closest( 'tr' ).nextAll('.quest_image:first').toggle();
});
});