我正在创建一个循环浏览html select j <option>
标签的jQuery插件,并以不同的格式输出它们。
在循环选项时,我还想保持它们与<optgroup>
之间的关系。作为一个PHP家伙,我认为一个多维关联数组将是答案。所以像这样:
<select>
<optgroup label="group1">
<option>option 1</option>
<option>option 2</option>
</optgroup>
<optgroup label="group2">
<option>option 3</option>
<option>option 4</option>
</optgroup>
</select>
......会变成这样的东西:
myArray = [
['group1'] => ['option 1', 'option 2'],
['group2'] => ['option 3', 'option 4']
];
这可以在javascript
或jQuery
吗?
答案 0 :(得分:3)
一些花哨的jQuery代码,我相信它应该可以运行测试它,并且它按预期工作。
var o = {};
$('optgroup').each(function() {
o[this.label] = $(this).find('option').map(function() {
return $(this).text();
}).get();
});
console.log(o);
<强> Live DEMO 强>
答案 1 :(得分:2)
这是可能的,但作为对象 {}
而不是数组[]
(在JavaScript中严格按照数字键排序,基于零):
myObj = {
'group1': ['option 1', 'option 2'],
'group2': ['option 3', 'option 4']
};
您可以使用纯JavaScript中的以下内容创建它。
var myObj = {};
// Get a reference to the <select>
var theSelect = document.getElementById('theSelect');
// And a node list of its <optgroup>
var optgroups = theSelect.getElementsByTagName('optgroup');
// Loop over the <optgroup>
for (var i=0; i<optgroups.length; i++) {
// And create an object property named with the optgroup label
myObj[optgroups[i].getAttribute('label')] = [];
var options = optgroups[i].getElementsByTagName('option');
// Loop over the <option>s inside it
for (var j=0; j<options.length; j++) {
// And stuff them into an array on the new object property:
myObj[optgroups[i].getAttribute('label')].push(options[j].innerHTML);
}
}
console.log(JSON.stringify(myObj));
// {"group1":["option 1","option 2"],"group2":["option 3","option 4"]}
答案 2 :(得分:-1)
您可以将其存储为对象
myArray = {
'group1' : ['option 1', 'option 2'],
'group2' : ['option 3', 'option 4']
};
这里可以使用..
访问optgroup中的选项myArray.group1[0] // Will give you option 1
myArray.group2[0] // Will give you option 3