Jquery-多个选择器-按顺序获取元素
我有一张这样的表格Jquery-多个选择器-按顺序获取元素,jquery,Jquery,我有一张这样的表格 <form id="myform"> <input type="hidden" name="a" value="a1"/> <input type="hidden" name="b" value="b2"/> <select name="c"><option value="c3" selected="true"/></select> <input type="text" name="d" value
<form id="myform">
<input type="hidden" name="a" value="a1"/>
<input type="hidden" name="b" value="b2"/>
<select name="c"><option value="c3" selected="true"/></select>
<input type="text" name="d" value="d4"/>
</form>
我得到的结果是:a1,b2,d4,c3
但我想得到的是:a1、b2、c3、d4(与UI中显示的顺序相同)
注意:我可以为所有输入和选择元素提供一些虚拟类(比如:mydatafields),并使用:
$('mydatafields').forEach()
类似于,但我正在检查是否有更好的解决方案
提前感谢。尝试:输入选择器。应该把它们都看作是输入最有效的方法是在元素中添加一个临时属性(例如类名),然后循环遍历每个元素,最后删除它。
var mydata = [];
$('#myform').find('input, select').addClass('temporaryClassName');
$('.temporaryClassName').each(function() {
mydata.push($(this).val());
}).removeClass('temporaryClassName');
另一种方法是使用:input
选择任何输入元素,然后过滤所需元素。对于本例,不严格需要过滤。出于教育目的,我加入了这一行
var mydata = [];
$('#myform').find('input, select').each(function() {
if(!/^input|select$/i.test(this.nodeName)) return; //Filter non-input/select
mydata.push($(this).val());
});
alert(mydata)
您不需要jquery来实现这个。。。。这里是一个非jquery方法来解决这个问题
var arr = [];
window.onload = function() {
getChildElements(document.getElementById("myform"), arr);
console.log(arr);
};
function getChildElements(element, arr) {
var elements = element.childNodes;
for (var i = 0, l = elements.length; i < l; i++) {
if (elements[i].type == "select-one") {
getChildElements(elements[i], arr);
} else if (elements[i].nodeType == 1) {
arr.push(elements[i]);
}
}
}
在Chrome&IE 9-中,似乎按照您的预期工作。您使用的浏览器是什么(不确定它是否有区别)?另外,您使用的是什么版本的jQuery@JamesHill的fiddle显示了与jQuery1.2.6相同的错误,但适用于更高版本。
var arr = [];
window.onload = function() {
getChildElements(document.getElementById("myform"), arr);
console.log(arr);
};
function getChildElements(element, arr) {
var elements = element.childNodes;
for (var i = 0, l = elements.length; i < l; i++) {
if (elements[i].type == "select-one") {
getChildElements(elements[i], arr);
} else if (elements[i].nodeType == 1) {
arr.push(elements[i]);
}
}
}
var elements = element.childNodes || element[0].childNodes;