【问题标题】:Select all inputs of a given form in Jquery在 Jquery 中选择给定表单的所有输入
【发布时间】:2010-01-19 02:55:08
【问题描述】:

我在 jquery 中有一个表单对象,我想选择这个表单的所有输入。

假设我的表单对象名为form。如果表单有 id,我可以这样做

var id = form.attr('id');
var inputs = $('#' + id + ' input');

如果没有,我可以检查一下,然后手动添加一个临时 ID,进行选择,然后删除该 ID(或将其留在那里)。但这看起来太复杂了,肯定有更简单的方法,但我找不到。

另一种可能的方式(我无法做到)就像

var inputs = $('input').filter(function() {
    var parents = this.parents();
    return ($.inArray(form, parents) != -1);
});

但这似乎也很复杂(而且它不像所说的那样工作)。

顺便问一下,从性能上看,哪种方式更方便?

【问题讨论】:

    标签: jquery-selectors


    【解决方案1】:

    http://docs.jquery.com/Traversing/find

    form.find('input')
    

    应该做我认为的伎俩。以防万一,如果您试图让所有输入字段获取它们的当前值并使用 AJAX 提交它们,您可以使用表单的 .serialize 方法:

    data: form.serialize(),
    

    就您的性能问题而言,我相信您的第一种方法更有效,第二种方法将遍历页面上的 每个 输入。从 jQuery 1.4 开始,第一种方法肯定更有效,最初基于对象 ID 的查询得到了显着增强。

    【讨论】:

    • 我怎么从来没有意识到 find() 方法的存在?这正是我想要的,谢谢。
    • 如果您还没有看到:visualjquery.com。在尝试找到我正在寻找的确切功能时,我发现该网站非常宝贵。
    • 这里只是一个小修正。 form.serialize() 无法识别表单。因此应该是 $('form').serialize()
    • @Ajay 我的解决方案是针对 OP 的问题,该问题暗示存在表单变量作为对表单对象的引用。如果您还没有表单参考,那么您需要按照您的建议创建一个。为了稳健起见,我建议您查询表单的 ID,以防您的页面上有多个表单标签。
    【解决方案2】:

    我不确定你在这里要做什么......如果页面上有多个表单,那么你必须有某种标识符......一个pernt和id,一个类的东西。如果您只有一个表单,那么它就像$('form input') 一样简单。

    【讨论】:

    • 当然我有不止一种形式。该表单已经由一个特定的 jquery 对象标识,我在示例代码中将其称为(可能令人困惑)表单。
    • 啊啊好吧...我认为这是 var mys 的错误!在这种情况下,一个简单的$('input', form) 应该可以工作,其中form 是您所说的表单元素的变量。
    猜你喜欢
    • 2013-08-15
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多