当前位置:  开发笔记 > 编程语言 > 正文

我如何使用jQuery的form.serialize但排除空字段

如何解决《我如何使用jQuery的form.serialize但排除空字段》经验,为你挑选了4个好方法。

我有一个搜索表单,其中包含许多通过GET提交的文本输入和下拉菜单.我想通过在执行搜索时从查询字符串中删除空字段来获得更清晰的搜索URL.

var form = $("form");  
var serializedFormStr = form.serialize();  
// I'd like to remove inputs where value is '' or '.' here
window.location.href = '/search?' + serializedFormStr

知道如何使用jQuery做到这一点?



1> Tom Viner..:

我一直在查看jQuery文档,我认为我们可以使用选择器在一行中执行此操作:

$("#myForm :input[value!='']").serialize() // does the job!

很明显,#myForm获取了id为"myForm"的元素,但最初对我来说不太明显的是#myForm和:input之间需要空格字符,因为它是后代运算符.

:input匹配所有input,textarea,select和button元素.

[value!='']是一个不等于过滤器的属性.奇怪的(也是有用的)是 all:input元素类型具有值属性,甚至是选择和复选框等.

最后还删除值为'.'的输入.(如问题中所述):

$("#myForm :input[value!=''][value!='.']").serialize()

在这种情况下,并置,即将两个属性选择器彼此相邻放置,意味着AND.使用逗号表示OR.对不起,如果那对CSS人来说很明显!


[value]在jquery 1.7.2中对我不起作用,[value!='']没有
对我来说,这个工作:`$ form.find(":input [value]")` - 没有选择空字段.这不起作用:`$ form.find(":input [value!='']")` - 所有字段都被选中.希望能帮助别人.(jQuery 2.0.0)
@Mvision,这是因为在这个答案中有一个小但重要的遗漏.对于jQuery 1.8及更早版本中的普通/纯CSS选择器,`[value]`匹配任何具有属性`value`*present*,**的元素,包括**那些具有空值(或没有)值的元素.这是由于早期jQuery版本中的一个错误导致`input [value]`和`:input [value]`的某些变体之间的不一致.举例来说,` `; 这个错误在[this fiddle](http://jsfiddle.net/cxUux/)中有说明.

2> Rich..:

我无法让Tom的解决方案工作(?),但我能够使用.filter()短函数来识别空字段.我正在使用jQuery 2.1.1.

var formData = $("#formid :input")
    .filter(function(index, element) {
        return $(element).val() != '';
    })
    .serialize();


无法获得批准的工作答案,但这很有效!谢谢!

3> RMazitov..:

这对我有用:

data = $( "#my_form input").filter(function () {
        return !!this.value;
    }).serialize();


而不是`input`选择器,应该有`:input`来包含选择等。

4> nickf..:

你可以用正则表达式来做...

var orig = $('#myForm').serialize();
var withoutEmpties = orig.replace(/[^&]+=\.?(?:&|$)/g, '')

测试用例:

orig = "a=&b=.&c=&d=.&e=";
new => ""

orig = "a=&b=bbb&c=.&d=ddd&e=";
new => "b=bbb&d=ddd&"  // dunno if that trailing & is a problem or not


正则表达式不会变得更糟,这是没有问题的.
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有