jquery选择表单,带链接查找的筛选器失败-返回空结果

jquery选择表单,带链接查找的筛选器失败-返回空结果,jquery,serialization,Jquery,Serialization,我有一个包含多个输入元素的表单,需要序列化-转换为HTTP查询字符串。那很好。然后我想去掉其中一个输入值,所以我使用find来选择所有不等于该值的元素;那很好。但后来我试图通过将两个发现链接在一起来删除两个输入,但失败了 我知道禁用不需要的输入或删除name属性也会起作用,但这些选项在我的应用程序中是不明智的 我有一个jsfiddle要演示: 让我在这里总结一下。有这样一种形式: <form> <input type="text" name='aa' value='aa'>

我有一个包含多个输入元素的表单,需要序列化-转换为HTTP查询字符串。那很好。然后我想去掉其中一个输入值,所以我使用find来选择所有不等于该值的元素;那很好。但后来我试图通过将两个发现链接在一起来删除两个输入,但失败了

我知道禁用不需要的输入或删除name属性也会起作用,但这些选项在我的应用程序中是不明智的

我有一个jsfiddle要演示:

让我在这里总结一下。有这样一种形式:

<form>
<input type="text" name='aa' value='aa'>
<input type="text" name='bb' value='bb'>
<input type="text" name='cc' value='cc'>
</form>
query_args = $('#form').serialize();
alert( query_args );  // looks OK
query_args = $('#form').find('[name!="bb"]').serialize();
alert( query_args );  // Very good, 'bb' is gone
query_args = $('#form').find('[name!="bb"]').find('[name!="cc"]').serialize();
alert( query_args );  // FAIL! Nothing is displayed.

如果我刚刚犯了一些愚蠢的错误,请尽量和蔼可亲

您的选择器不正确,请尝试以下操作:

form_args = $("#actions").find("[name!='cc'],[name!='ee']").serialize();
您需要从操作中查找cc和ee,因此在属性选择器中使用逗号将它们分隔开

为什么你的代码不起作用是因为你试图在actions fine中找到bb,但是你试图在bb中找到cc,它不是bb的孩子。所以你什么也得不到。在选择器中使用逗号分隔符,您试图查找动作的后代cc和bb form_args=$actions.find[name!='cc'][name!='ee'].序列化


找到元素属性名=抄送和姓名=dd

您展示了我的JSFIDLE的摘录,谢谢您的关注!,我的原文是错的。我看你的建议是正确的。根据我最初的错误代码块,您对我的错误(不是bb的孩子)的解释是有意义的,但如现在所示[name!='bb']。链不应该工作吗?@GlennN ahh我明白你的意思了,试试这个表单_args=$actions.findinput:not[name='cc'],[name='ee'].serialize;谢谢,我独立地想出了这个方法,并发现它是有效的。我应该先看看你的新评论。基本上,这些选择器设置为并集或交集,我们可以使用布尔等价将交集选择器转换为并集选择器。谢谢,您的答案是正确的。find子句需要按照您所展示的那样编写-中间没有逗号,也没有空格,或者我尝试了使用空格。非常挑剔。我需要找到一个关于构建这些过滤器的好教程。在考虑了答案之后,我做了进一步的搜索并更新了我的小提琴。现在我明白了[name!='cc'][name!='ee']是一个集合交集运算,而用逗号[name!='cc']分隔这两个子句,[name!='ee']是一个集合并集。因此,集合并集将给出错误的结果-所有输入元素都将返回。由于并集和交集类似于OR和and,我还测试了备用子句:not[name='cc'],[name='ee'],发现它可以正常工作。很好,我知道我有更好的理解。我仍然不明白为什么链接find.find不起作用-我会把它保存下来以供进一步研究。我也考虑过使用过滤器,但意识到它不是为了解决这个问题。