如果没有特定ID,jQuery隐藏div

时间:2015-10-23 10:32:21

标签: jquery

我有一个表单会在点击时创建自己的副本。

如果不是第一行,我希望能够清除输入字段并在另一次单击时隐藏特定的div。如果这是第一个div,它应该只清除表格。

我得到的是:

<div id="fields_1" style="margin-bottom: 5px;" class="items">
    <div class="form_div">
        <input name="01_name" id="01_name" value="" placeholder="name" type="text" />
    </div>
    <div class="form_div plusminus">
        <div class="minus">
            <span>Delete Row</span>
        </div>
    </div>
</div>
<div id="fields_2" style="margin-bottom: 5px;" class="items">
    <div class="form_div">
        <input name="02_name" id="02_name" value="" placeholder="name" type="text" />
    </div>
    <div class="form_div plusminus">
        <div class="minus">
            <span>Delete Row</span>
        </div>
    </div>
</div>


$(document).ready(function(){
    $(".minus").click(function(){
        $(this).parent('div').parent('div').find(':input').val('');
        if($(this).parent('div').parent('div').not('#fields_1'))
        {
            $(this).parent('div').parent('div').hide('slow');
        }
    });
});

任何人都可以看到我错了吗?

2 个答案:

答案 0 :(得分:1)

不要使用多个parent()功能。相反,请使用closest()。并且,使用:first-of-type选择器。

也许这会有所帮助:

$(document).ready(function(){
    $(".minus").click(function(){
        $(this).closest('div.items').find('input').val('');
        $(this).closest('div.items').not('div.items:fist-of-type').hide('slow');
    });
});

答案 1 :(得分:0)

您想要更改这三行:

if($(this).parent('div').parent('div').not('#fields_1'))
{
    $(this).parent('div').parent('div').hide('slow');
}

是这样的:

$(this).parent('div').parent('div').not('#fields_1').hide('slow');

原因是.not用于过滤查询选择。它不会返回truefalse

因此,当您执行$(this).parent('div').parent('div')时,您可以选择div。现在当您在该选择上运行.not('#fields_1')时,您删除任何为真的div,其中包含fields_1的ID“。现在,您选择的div不包含id,您可以对该过滤组执行任何操作。