jquery hide / show仅适用于foreach

时间:2015-05-11 16:19:05

标签: javascript jquery

隐藏/显示在asp.net视图中对foreach循环的第一个元素工作正常,但是对于另一个元素不起作用。

脚本

 $('#SelectedContainer').hide();
 $(".data").click(function(e) {
    e.preventDefault();
    $('#BrowseContainer').hide();
    $('#SelectedContainer').show();
 });
 $("#goback").click(function(e) {
    e.preventDefault();
    $('#SelectedContainer').hide();
    $('#BrowseContainer').show();
 });

HTML

foreach (var ....){
<table border="1">
    <tr class="tableBody">
        <td>
            <div id="SelectedContainer" class="container-fluid">
                <div class="row-fluid">
                    <div><a id="goback" href="#">hide</a></div>
                    Test
                </div>
            </div>
            <div id="BrowseContainer" class="container-fluid">
                <div class="row-fluid container">
                    <a class="data" href="#">Show</a>
                </div>
            </div>
        </td>
    </tr>
</table>
}

我的问题是什么?

1 个答案:

答案 0 :(得分:1)

ID必须是唯一的,您应该使用通用类。您应该使用$.fn.closest(),然后您可以使用$.fn.find()来定位所需的元素。

在示例中,我使用了类而不是ID。

HTML

<table border="1">
    <tr class="tableBody">
        <td>
            <div class="SelectedContainer container-fluid">
                <div class="row-fluid">
                    <div><a class="goback" href="#">hide</a></div>
                    Test
                </div>
            </div>
            <div class="BrowseContainer container-fluid">
                <div class="row-fluid container">
                    <a class="data" href="#">Show</a>
                </div>
            </div>
        </td>
    </tr>
</table>

脚本

$('.SelectedContainer').hide();
$(".data").click(function (e) {
    e.preventDefault();
    var table = $(this).closest('table');
    table.find('.BrowseContainer').hide();
    table.find('.SelectedContainer').show();
});

$(".goback").click(function (e) {
    e.preventDefault();
    var table = $(this).closest('table');
    table.find('.SelectedContainer').hide();
    table.find('.BrowseContainer').show();
});