深入了解jQuery的.find()? (意外结果)

时间:2013-09-12 01:54:37

标签: javascript jquery dom

我有一个带有几个选择框的“类别树”。当您为项目选择一个类别时,它会加载子类别并在下一个选择框中显示它们。

在表单的.submit()上,我删除了DOM中的第一个.category。保留最后一个后,它会将name属性提供给最后一个.category

当页面上有多个项目表单时会出现扭曲。我所做的是使用jQuery的.item迭代.each(),然后从那里使用jQuery的.find()来查找项目中的类别。

我正在使用的While循环创建了一个无限循环。我在整个脚本执行期间使用console.log()输出变量,我不认为{{1我正在回归我的想法。

HTML:

.find()

的javascript:

<div class="item">
    ....
    <div class="category"></div>
    <div class="category"></div>
    ....
</div>

在while语句中调用$('#transaction-form').submit(function(){ $('.item').each(function(){ var index = $(this).index(); var category = $(this).find('.category'); while (category.length > 1){ $($(category)[0]).parent().remove(); } $(category[0]).attr('name', 'form-' + index.toString() + '-category'); }); }); 会返回2。我认为category.length的返回值不是jQuery对象。

2 个答案:

答案 0 :(得分:1)

删除类别父条目实际上并未将其从Jquery对象中删除。所以你得到了一个无限循环,因为你的长度从未真正改变......

答案 1 :(得分:1)

尝试

$('#transaction-form').submit(function(){
    var x = $('.item').has('.category');
    x.not(x.last()).remove();
    });
});

参考文献

.has()

.last()

.not()

.remove()