在我的页面上,我制作了一个由select2插件转换成一个选择元素。
我已经建立了嵌套的optgroup,但是我无法使optgroup的第一级和第二级的可折叠性
。我的脚本仅能使第二级折叠。
有人可以指导我解决此问题吗?
<div id="select-container">
<select
id="select-test"
multiple="multiple"
style="width:300px">
<optgroup label="BMW">
<optgroup label="   Cars">
<option value="1">   BMW X1</option>
<option value="2">   BMW Z4</option>
<option value="3">   BMW i3</option>
</optgroup>
<optgroup label="   Motorcycles">
<option value="1">   S 1000 RR</option>
<option value="2">   K 1600 B</option>
<option value="3">   F 800 GT</option>
</optgroup>
</optgroup>
<optgroup label="Yamaha">
<optgroup label="   Motorcycles">
<option value="1">   TDR125</option>
<option value="2">   XT500</option>
<option value="3">   YZR500</option>
</optgroup>
<optgroup label="   Snowmobiles">
<option value="1">   Viper L-TX</option>
<option value="2">   Viking 540</option>
<option value="3">   Sidewinder X-TX LE41</option>
</optgroup>
</optgroup>
</select>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[$("#select-test").select2();
let optgroupState = {};
$("body").on('click', '.select2-container--open .select2-results__group', function() {
$(this).siblings().toggle();
let id = $(this).closest('.select2-results__options').attr('id');
let index = $('.select2-results__group').index(this);
optgroupState[id][index] = !optgroupState[id][index];
})
$('#select-test').on('select2:open', function() {
$('.select2-dropdown--below').css('opacity', 0);
setTimeout(() => {
let groups = $('.select2-container--open .select2-results__group');
let id = $('.select2-results__options').attr('id');
if (!optgroupState[id]) {
optgroupState[id] = {};
}
$.each(groups, (index, v) => {
optgroupState[id][index] = optgroupState[id][index] || false;
optgroupState[id][index] ? $(v).siblings().show() : $(v).siblings().hide();
})
$('.select2-dropdown--below').css('opacity', 1);
}, 0);
})]]></xp:this.value>
</xp:scriptBlock>
</div>