1

我在 html 中有一个冗长的表单,其中一些<input>有一个名为dependancy. 我有一个使用 jQuery 选择<form>元素的函数。像这样:

form = module.find('#formContainer').find('form');

form现在包含一个 HTML ,我通过输出form到控制台确保它包含它。现在,我想删除其中包含的一些元素属于formclass dependancy。我想我可以像这样使用 jQuery 的 .not() :

disabledFormElements = form.find('.dependency');
cleanForm = form.not(disabledFormElements);

当我输出disabledFormElements到控制台时,它只显示我想要删除的元素。唉, class 的元素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>
4

4 回答 4

1

你的误解是这样的:

form = module.find('#formContainer').find('form');

创建一个只包含实际form元素的 jQuery 对象,而不是它们的后代/子元素。如果 formContainer 中只有一个表单对象,那么这个 jQuery 对象只包含一个 DOM 元素。

因此,当您尝试使用 从中删除项目时,.not()jQuery 对象中的任何内容都不会匹配,因此不会删除任何内容。

如果你想要一个包含表单中所有对象的 jQuery 对象,你可以这样做:

form = module.find("#formContainer form *");

而且,如果您想删除与您的班级匹配的所有项目,您可以这样做:

form = module.find("#formContainer form *").not(".dependancy");
于 2012-09-03T19:46:34.570 回答
0

您应该使用它来选择除.dependancy类元素之外的元素。

cleanForm = form.not(".dependancy");

如果上面的代码不起作用试试这个:

cleanForm = $(form).not(".dependancy");

或者交替使用这个:

cleanForm = $(form).find(":not(.dependancy)");

希望这会有所帮助。

于 2012-09-03T19:19:08.213 回答
0

not()过滤掉与其参数匹配的元素,并从剩余的元素中构建一个新的 jQuery 对象。它不会就地修改原始 jQuery 对象。

我最初的答案被误导了,因为传递find()to的结果not()总是会返回一个与原始内容相同的 jQuery 对象,因为find()返回的后代元素在我们的例子中不属于原始集合的一部分。

我建议您使用:not()选择器一次性匹配<form>您要查找的元素:

var form = module.find("#formContainer form:not(.dependency)");
于 2012-09-03T19:23:32.947 回答
0

那这个呢 ?

module.find('#formContainer').find('form').each(function(i, f){
    form = $(f);
    form.html(form.children().not(".dependancy"));
});
于 2012-09-03T19:38:00.137 回答