jquery 使用非选择器序列化

jquery serialize with not selector

我尝试使用 jquery serialize ($.serialize()) 和 not 选择器但没有成功。 我有一个 table 到一个表单中,我想在序列化之前排除它。

这是代码:

$("#id_form").not("#id_table").serialize();

这是一个fiddle说明问题

您可以创建 form.clone() 并删除 table 然后您可以使用它来序列化:

var $clone =$("#id_form").clone();

$clone.find('table').remove();

var $frm = $clone.serialize();  // <-----here

注意:我在手机上无法查看fiddle。

要仅过滤不属于 table 的输入,您可以使用:

$("#id_form :input").filter(function() {
  return ($('#id_table').find($(this)).length == 0);
}).serialize();

另一个解决方案是:

$("#id_form :input").not($('#id_table :input')).serialize();

简化所有任务的可能解决方法是创建自己的过滤器:

$.extend($.expr[':'],{
   inputNotInTable: function(ele) {
      var obj = $(ele);
       return obj.is(':input') == true && obj.closest('#tab1').length == 0;
   }
});

$("#test :inputNotInTable").serialize();

这是您的 fiddle 使用此解决方案的分支

$("#test :input").not($("#tab1 :input")).serialize();

我认为这是更好的方法