moo*_*eek 9 javascript jquery select options optgroup
我有一个动态填充(由ajax)选择框,其结果选项如下:
<select id="destination" name="destination">
<option value="london-paris">London-Paris</option>
<option value="paris-london">Paris-London</option>
<option value="london-newyork">London-New-York</option>
<option value="newyork-london">New-York-London</option>
<option value="london-berlin">London-Berlin</option>
<option value="berlin-london">Berlin-London</option>
<option value="london-helsinki">London-Helsinki</option>
<option value="helsinki-london">Helsinki-London</option>
Run Code Online (Sandbox Code Playgroud)
......实际上有更多但不是本质
我想要的是在加载列表后使用Javascript(可能使用Jquery或Mootools)对optgroup的每个这两个选项部分进行分组,这样在每个组之前 - 我们添加一个带有我们从第二个选项获得的标签的optgroup标签该组的html(实际上是破折号之前的单词):
<select id="destination" name="destination">
<optgroup label="Paris">
<option value="london-paris">London-Paris</option>
<option value="paris-london">Paris-London</option>
</optgroup>
<optgroup label="New-York">
<option value="london-newyork">London-New-York</option>
<option value="newyork-london">New-York-London</option>
</optgroup>
<optgroup label="Berlin">
<option value="london-berlin">London-Berlin</option>
<option value="berlin-london">Berlin-London</option>
</optgroup>
<optgroup label="Helsinki">
<option value="london-helsinki">London-Helsinki</option>
<option value="helsinki-london">Helsinki-London</option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)
但是,每组中总有两个目的地.
请提前告知如何实施此建议.
你可以使用jQuery来做到这一点:
$(document).ready(function() {
var select = $('#destination');
var opt1, opt2;
$('option', select).each(function(i) {
if (i % 2 === 0) {
opt1 = $(this);
} else {
opt2 = $(this);
var label = opt1.text().replace('London-', '');
var optgroup = $('<optgroup/>');
optgroup.attr('label', label);
opt2.add(opt1).wrapAll(optgroup);
}
});
});
Run Code Online (Sandbox Code Playgroud)
此代码迭代select标记中的所有选项,并将每组两个包装在optgroup中.它还根据选项中的文本计算出将optgroup标记为什么.
这不是太棘手,你只需要稍微调整一下你的选择.将它们从文档流中取出,在两个相关选项的位置添加一个optgroup,并将选项附加到该optgroup.
假设选项实际上是顺序的,如在您的示例中,可能的,良好的旧DOM脚本实现如下:
var destinationSelect = document.getElementById("destination");
var options = destinationSelect.getElementsByTagName("option");
var optgroups = [];
while(options.length > 0) {
var option1 = options[0];
var option2 = options[1];
var optgroup = document.createElement("optgroup");
var label = option1.innerHTML.replace(/^[^\-]-/, "");
optgroup.setAttribute("label", label);
destinationSelect.removeChild(option1);
destinationSelect.removeChild(option2);
optgroup.appendChild(option1);
optgroup.appendChild(option2);
optgroups.push(optgroup);
}
for(var i = 0; i < optgroups.length; i ++) {
destinationSelect.appendChild(optgroups[i]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24639 次 |
| 最近记录: |