我有一个大约有20个项目的比较表。我想点击链接时会显示有关该项目的更多信息。我可以使用以下函数来完成此操作:
$(function(){
$('.show').click(function() {
$('#keywords').fadeIn('slow');
});
});
然而,正如我所提到的,有20个项目并且重复上述代码可能会变得很麻烦。
如何创建一个能够在点击的链接下方显示div的函数?最重要的是,如果一个div打开或可见并且另一个项目被点击,我希望另一个项目关闭或淡出然后另一个项目显示。
以下是我的部分网页HTML:
<tr class="second">
<td class="cat" style="width: 33%;">
<div>
<a class="show" href="#"> Mobile Keywords</a>
</div>
<div id="keywords" class="hide">
p>Info Here</p>
</div>
</td>
<td style="width: 33%;">
<i class="icon-ok"></i>
</td>
<td class="" style="width: 33%;">
<i class="icon-ok"></i>
</td>
</tr>
<tr class="second">
<td class="cat" style="width: 33%;">
<div>
<a class="show" href="#">Another Category</a>
</div>
<div id="category-2" class="hide">
p>Info Here</p>
</div>
</td>
<td style="width: 33%;">
<i class="icon-ok"></i>
</td>
<td class="" style="width: 33%;">
<i class="icon-ok"></i>
</td>
</tr>
我认为这可以使用this
属性完成,但我不知道如何实现this
,因为我对JS不够熟悉。
总结一下:如何在此表中有一个链接,然后链接会显示相应的div,而不必为每个项目创建重复代码?
答案 0 :(得分:1)
尝试
$('.show').click(function() {
$('.hide').hide();
$(this).closest('td.cat').find('.hide').fadeIn();
});
编辑:根据问题中的要求添加了隐藏功能。
在上面的代码中,this
引用了触发click事件处理程序的元素(单击的锚元素)。
然后,this
被包装在一个jQuery对象中,我们使用.closest
方法遍历DOM树到一个共同的祖先,从那里我们找到要显示的隐藏元素。
第一行中的$('.hide').hide()
是不言自明的,它会在为要显示的hide
动画之前隐藏fadeIn
类的所有元素。
答案 1 :(得分:0)
$(function(){
$('.show').click(function() {
$(this).parent().next('div').fadeIn('slow');
});
});
利用.parent()方法,我们可以遍历dom一级,然后使用.next()我们得到 next 立即div,它似乎跟随你的标记序列
答案 2 :(得分:0)
使用您的HTML标记,这可能会有效。将隐藏当前显示的div,只有当它不是相同的元素并显示所需的那个时。
$(function(){
$('.show').click(function() {
if ( !$(this).hasClass('shown') )
{
$('.shown').removeClass('shown').parent().siblings('div').hide();
$(this).addClass('shown').parent().siblings('div').fadeIn('slow');
}
});
});
修改:工作代码。
答案 3 :(得分:0)
$(function(){
$('.show').click(function() {
$('.hide').hide();
$(this).parent('div').next('div').fadeIn('slow');
});
});
使用此(如您所料),查找其父div,然后查找其第一个兄弟div。
编辑包含隐藏功能。