我只是想知道循环遍历表单中所有子元素的最佳方法是什么? 我的表单包含输入和选择元素。
目前我有:
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) {
但这不起作用。有谁知道为什么会发生这种情况? 谢谢!
答案 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循环不能按预期工作。
答案 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”