如何遍历表单jQuery的所有元素

时间:2013-01-02 10:39:07

标签: jquery loops

我只是想知道循环遍历表单中所有子元素的最佳方法是什么? 我的表单包含输入和选择元素。

目前我有:

success: function(data) {
                $.each(data.details, function(datakey, datavalue) {
                    $('#new_user_form > input').each(function(key, value) {
                        if($(this).attr('id') == datakey) {
                            $(this).val(datavalue);
                        }
                    });
                });
            }

这只循环遍历表单的输入元素,我也希望包含select元素:

我试过了:

$('#new_user_form > input, #new_user_form > select').each(function(key, value) {

但这不起作用。有谁知道为什么会发生这种情况? 谢谢!

9 个答案:

答案 0 :(得分:71)

来自jQuery :input selector page

  

因为:input是jQuery扩展而不是CSS规范的一部分,使用:input的查询无法利用本机DOM querySelectorAll()方法提供的性能提升。要在使用时获得最佳性能:输入选择元素,首先使用纯CSS选择器选择元素,然后使用.filter(“:input”)。

这是最佳选择。

$('#new_user_form *').filter(':input').each(function(){
    //your code here
});

答案 1 :(得分:24)

纯JavaScript并不困难:

for(var i=0; i < form.elements.length; i++){
    var e = form.elements[i];
    console.log(e.name+"="+e.value);
}

注意:因为form.elements是一个对象for-in循环不能按预期工作。

找到答案here (by Chris Pietschmann),记录here (W3S)

答案 2 :(得分:15)

$('#new_user_form').find('input').each(function(){
   //your code here
});

答案 3 :(得分:9)

取自#jquery Freenode IRC频道:

$.each($(form).serializeArray(), function(_, field) { /* use field.name, field.value */ });

感谢频道上的@Cork。

答案 4 :(得分:4)

我正在使用:

$($('form').prop('elements')).each(function(){
    console.info(this)
});

看起来很难看,但对我来说,用jQuery获取所有元素仍然是更好的方法。

答案 5 :(得分:3)

如果你这样做,会发生什么: -

$('#new_user_form input, #new_user_form select').each(function(key, value) {

参考 LIVE DEMO

答案 6 :(得分:3)

我找到了这个简单的jquery片段,方便我选择我想要使用的选择器类型:

$("select, input").each(function(){
     // do some stuff with the element
});

答案 7 :(得分:1)

$('#new_user_form :input')应该是你前进的方向。请注意省略>选择器。有效的HTML表单不允许输入标记是表单标记的直接子标记。

答案 8 :(得分:0)

  

执行表单内的两个jQuery序列化程序之一以获取具有提交值的所有输入。

Sub CleanReportStep10() 
'align columns C and D realign columns by moving data from C to D'
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("copied") 
Dim i As Long

For i = 19 To ws.Range("C" & ws.Rows.Count).End(xlUp).Row
    If ws.Range("D" & i) = "" Then
        ws.Range("C" & i).Copy.Value = ws.Range("D" & i).Value
    End If
Next i

End Sub
  

serializeArray()将产生一个名称和值的数组

     

0:{名称:“ OwnLast”,值:“ Bird”}
  1:{名称:“ OwnFirst”,值:“ Bob”}
  2:{name:“ OutBldg []”,值:“ PDG”}
  3:{name:“ OutBldg []”,值:“ PDA”}

var criteria = $(this).find('input,select').filter(function () {
    return ((!!this.value) && (!!this.name));
}).serializeArray();

var formData = JSON.stringify(criteria);
  

serialize()以标准的URL编码表示法创建文本字符串

     

“ OwnLast = Bird&OwnFirst = Bob&OutBldg%5B%5D = PDG&OutBldg%5B%5D = PDA”