jQuery SerializeArray和Not选择器

时间:2016-04-21 12:29:06

标签: javascript jquery serializearray

我使用.serializeArray函数来收集表单的所有输入,但我想排除某个div类中的输入。我认为.not()选择器会执行此操作,但它似乎不起作用。

最基本的是我的代码:

HTML:

<form class="theForm">
  <input name="a" value="a"/>
  <div class="excludeMe">
    <input name="c" value="c"/>
  </div>
</form>

使用Javascript:

$.each($(".theForm").not(".excludeMe").serializeArray(), 
function() {
    alert(this.name);
});

我希望警报只是'a',但这会警告'a'然后'b'。

小提琴:https://jsfiddle.net/cysaczu5/

5 个答案:

答案 0 :(得分:1)

您必须在<div><input/></div>

中包装所有输入

然后将选择器更改为此$.each($(".theForm :not(.excludeMe) input")

https://jsfiddle.net/cysaczu5/3/

我建议删除div并直接将“excludeMe”类添加到输入中。然后选择器变为$.each($(".theForm input:not(.excludeMe)")

答案 1 :(得分:0)

在输入而不是div上使用此类,它将起作用。

'


 $.each($("input").not(".excludeMe").serializeArray(), 
   function() {
    alert(this.name);
});

<input name="c" class='excludeMe' value="c"/>

JSFidle

答案 2 :(得分:0)

请尝试

<form class="theForm">
<input name="a" value="a"/>
<div class="excludeMe">
  <input class="excludeMe" name="c" value="c"/>
</div>
</form>
$.each($(".theForm :not(.excludeMe)").serializeArray(), 
function() {
    alert(this.name);
});

答案 3 :(得分:0)

最简单的答案是从您要跳过的输入中删除name属性。这样,serializeArray()也会跳过它:

HTML:

<form class="theForm">
  <input name="a" value="a" />
  <input value="c" />
</form>

JS:

$.each($(".theForm").serializeArray(), function() {
    alert(this.name);
});

答案 4 :(得分:0)

只需将input放在:not语句之前,只匹配表单内的输入,而不是表单本身:

$.each($(".theForm input:not(.excludeMe)").serializeArray(), function() {
    alert(this.name);
});

https://jsfiddle.net/cysaczu5/5/