我在html中有一个冗长的表单,有些<input>
有一个名为dependancy
的类。我有一个使用jQuery来选择<form>
元素的函数。像这样:
form = module.find('#formContainer').find('form');
form
现在包含一个HTML,我确保它通过向控制台输出form
来包含它。现在,我想删除form
中包含dependancy
类的一些元素。我想我可以像这样使用jQuery的.not():
disabledFormElements = form.find('.dependency');
cleanForm = form.not(disabledFormElements);
当我将disabledFormElements
输出到控制台时,它只显示我想要删除的元素。唉,类dependancy
的元素不会从form
中删除。根据jQuery文档,您可以将各种类型传递给.not()方法,它应该可以工作。为什么.not()函数不能从jQuery form
删除元素?
我正在添加表单的HTML以使其更清晰:
<div id="formContainer">
<form id="customText" accept-charset="UTF-8">
<div class="row equal-field-heights">
<div class="four columns">
<fieldset>
<legend>Is this for a Bar or Bat Mitzvah?</legend>
<div class="four columns">
<label for="radio1">
<input class="dependency" name="gender" type="radio" id="radio1" value="m" checked onclick="changeGender('m')">Bar
</label>
</div>
<div class="four columns">
<label for="radio2">
<input class="dependency" name="gender" type="radio" id="radio2" value="f" onclick="changeGender('f')">Female
</label>
</div>
<input type="hidden" name="as_he_she_steps" id="as_he_she_steps" value="he steps" />
.
.
.
.
</form>
</div>
答案 0 :(得分:1)
你的误解是:
form = module.find('#formContainer').find('form');
创建一个jQuery对象,该对象仅包含实际的form
元素,而不包含其后代/子元素。如果formContainer中只有一个表单对象,那么这个jQuery对象只包含一个DOM元素。
因此,当您尝试从.not()
中删除项目时,jQuery对象中没有任何内容匹配,因此不会删除任何内容。
如果你想要一个包含表单中所有对象的jQuery对象,你可以这样做:
form = module.find("#formContainer form *");
并且,如果您想删除与您的课程匹配的所有项目,您可以这样做:
form = module.find("#formContainer form *").not(".dependancy");
答案 1 :(得分:0)
除了.dependancy
类元素之外,您应该使用它来选择。
cleanForm = form.not(".dependancy");
如果以上代码不起作用,请尝试:
cleanForm = $(form).not(".dependancy");
或者也可以使用:
cleanForm = $(form).find(":not(.dependancy)");
希望这会有所帮助。
答案 2 :(得分:0)
not()过滤掉与其参数匹配的元素,并从其余元素构建 new jQuery对象。它不会就地修改原始jQuery对象。
我的原始答案是错误的,因为将find()
的结果传递给not()
将始终返回一个与原始内容相同的jQuery对象,因为find()返回的是后代元素不属于我们案例中的原始集合。
我建议您使用:not()选择器一次性匹配您正在寻找的<form>
元素:
var form = module.find("#formContainer form:not(.dependency)");
答案 3 :(得分:0)
这个怎么样?
module.find('#formContainer').find('form').each(function(i, f){
form = $(f);
form.html(form.children().not(".dependancy"));
});