假设我的表单上有以下DOM
:
<body>
<input id="input_1" class="post" type="text" value="abc" />
<input id="input_2" class="xxxx" type="text" value="xyz" /> <!--TO IGNORE-->
<input id="input_3" class="post" type="checkbox" checked="checked" />
<input id="input_4" class="post" type="radio" checked="checked" />
<select id="input_5" class="post">
<option value="1">One</option>
<option value="2" selected="selected">Two</option>
</select>
<input id="input_6" class="xxxx" type="checkbox" /> <!--TO IGNORE-->
</body>
如何获取所有class="post"
元素的值数组
因此,Multidimentional Array
将以类似于的方式出现
POST_ELEMENTS[0]["input_1"] = "abc";
POST_ELEMENTS[1]["input_3"] = 1;
POST_ELEMENTS[2]["input_4"] = 1;
POST_ELEMENTS[3]["input_5"] = "two";
- 请如何构造这种属于所有特定类别
class="post"
的Array
您不需要二维数组,数组的索引将指示0
、1
、2
等。
类似数组的jQuery对象
您可以获得一个类似数组的对象,它允许您访问已经匹配的元素。
var posts = $('.post');
alert(posts[0].id); // input_1
alert(posts[0].value); // abc
类似数组的纯JS查找
您还可以使用纯JavaScript方法getElementsByClassName
来获取所有元素(尽管如果不强制转换$()
,jQuery函数将无法工作(
var posts = document.getElementsByClassName('post');
alert(posts[0].id); // input_1
alert(posts[0].value); // abc
阵列
谨慎地构建一个实际的数组(而不是类似数组的对象(,你可以这样做:
var posts = [];
$('.post').each(function () {
posts.push(this);
});
alert(posts[0].id); // input_1
alert(posts[0].value); // abc
var posts = {}
$('.post').each(function(v,i){
posts[this.id] = this.value
})
将返回一维数组{input_1':1,input_2':2}
var posts = []
$('.post').each(function(v,i){
var obj = {}
obj[this.id] = this.value
posts.push( obj)
})
将创建多维数组
您可以使用getElementsByClassName()
获取所有节点,然后将它们映射到您想要的格式:
var POST_ELEMENTS = {};
[].forEach.call(
document.getElementsByClassName('post'),
function(item) {
POST_ELEMENTS[item.id] = item.value;
}
);
演示
var obj=[];
console.log(obj);
$('.post').each(function(key,value)
{ obj[key]={};
obj[key][$(value).attr('id')]=$(value).attr('value');
});
这是我的小提琴
我看不出有任何理由存在2个维度——据我所见,这里只需要一个:
var posts = {};
$('.port').each(function() {
posts[this.id] = this.value;
});
结果是键/值对的对象:
posts = {
'input_1': abc',
...
}