1

html には長いフォームがあり、一部の に<input>は というクラスがありdependancyます。jQueryを使用して<form>要素を選択する関数があります。そのようです:

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

formHTML が含まれるようにformなりました。コンソールに出力することで、それが含まれていることを確認しました。formここで、 class に含まれるいくつかの要素を削除したいと思います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にフォームオブジェクトが1つしかない場合、このjQueryオブジェクトにはDOM要素が1つだけ含まれます。

したがって、でアイテムを削除しようとすると.not()、jQueryオブジェクトの何も一致しないため、何も削除されません。

フォーム内のすべてのオブジェクトを含むjQueryオブジェクトが必要な場合は、次のように実行できます。

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

そして、クラスに一致するすべてのアイテムを削除したい場合は、次のようにすることができます。

form = module.find("#formContainer form *").not(".dependancy");
于 2012-09-03T19:46:34.570 に答える
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

.dependancyこれを使用して、クラス要素以外を選択する必要があります。

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

上記のコードが機能しない場合は、次を試してください。

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

または、これを代わりに使用します。

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

これが役立つことを願っています。

于 2012-09-03T19:19:08.213 に答える
0

これはどうですか ?

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