select2 中的组值
Group values in select2
Usecase:我正在尝试对 select2 中的值进行分组。例如:前 4 个值应该放在一组中,其他值应该放在第二组中。我所说的分组是指 <optgroup>
标签。
代码:
let el = document.getElementById('role');
createSelect2("role", 'role', el);
function createSelect2(elementId, elementName, parent) {
var select = document.createElement('select');
select.setAttribute('id', elementId);
select.setAttribute('name', elementName);
parent.append(select);
var parameters = {}
var values = buildGroup();
parameters.width = '90%';
parameters.data = values;
$(select).select2(parameters);
return select;
}
function buildGroup() {
let roles = ['role 1', 'role 2', 'role 3', 'role 4', 'role 5', 'role 6', 'role 7', 'role 8', 'role 9', 'role 10', 'role 11', 'role 12', 'role 13', 'role 14', 'role 15',]
let valuesGroup1 = [roles[0], roles[1], roles[2], roles[3]];
let valuesGroup2 = [];
for (index = 4; index < roles.length; index++) {
valuesGroup2.push(roles[index]);
}
let group1Obj = ['{"text" : "Common Groups", "children" : "' + valuesGroup1 + '"}', '{"text" : "Other Groups", "children" : "' + valuesGroup2 + '"}'];
return group1Obj;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.min.js"></script>
<div id="role">
</div>
问题:它没有按组呈现数据。相反,它连接数据并仅显示两个值。
我指的是这个:https://select2.org/data-sources/formats#grouped-data
这是 jsFiddle:https://jsfiddle.net/s8yoz2aL/1/
如评论中所述,group1Obj
设置不正确。这是修复:
function buildGroup() {
let roles = ['role 1', 'role 2', 'role 3', 'role 4', 'role 5', 'role 6', 'role 7', 'role 8', 'role 9', 'role 10', 'role 11', 'role 12', 'role 13', 'role 14', 'role 15',]
let valuesGroup1 = [{"id": 0, "text": roles[0]}, {"id": 1, "text": roles[1]}, {"id": 2, "text": roles[2]}, {"id": 3, "text": roles[3]}];
let valuesGroup2 = [];
for (index = 4; index < roles.length; index++) {
valuesGroup2.push(roles[index]);
}
var jsonGroup1 = {"text" : "Common Groups"};
jsonGroup1.children = valuesGroup1;
var jsonGroup2 = {"text" : "Other Groups"};
jsonGroup2.children = valuesGroup2;
console.log(jsonGroup1);
let group1Obj = [jsonGroup1, jsonGroup2];
return group1Obj;
}
Usecase:我正在尝试对 select2 中的值进行分组。例如:前 4 个值应该放在一组中,其他值应该放在第二组中。我所说的分组是指 <optgroup>
标签。
代码:
let el = document.getElementById('role');
createSelect2("role", 'role', el);
function createSelect2(elementId, elementName, parent) {
var select = document.createElement('select');
select.setAttribute('id', elementId);
select.setAttribute('name', elementName);
parent.append(select);
var parameters = {}
var values = buildGroup();
parameters.width = '90%';
parameters.data = values;
$(select).select2(parameters);
return select;
}
function buildGroup() {
let roles = ['role 1', 'role 2', 'role 3', 'role 4', 'role 5', 'role 6', 'role 7', 'role 8', 'role 9', 'role 10', 'role 11', 'role 12', 'role 13', 'role 14', 'role 15',]
let valuesGroup1 = [roles[0], roles[1], roles[2], roles[3]];
let valuesGroup2 = [];
for (index = 4; index < roles.length; index++) {
valuesGroup2.push(roles[index]);
}
let group1Obj = ['{"text" : "Common Groups", "children" : "' + valuesGroup1 + '"}', '{"text" : "Other Groups", "children" : "' + valuesGroup2 + '"}'];
return group1Obj;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.min.js"></script>
<div id="role">
</div>
问题:它没有按组呈现数据。相反,它连接数据并仅显示两个值。
我指的是这个:https://select2.org/data-sources/formats#grouped-data
这是 jsFiddle:https://jsfiddle.net/s8yoz2aL/1/
如评论中所述,group1Obj
设置不正确。这是修复:
function buildGroup() {
let roles = ['role 1', 'role 2', 'role 3', 'role 4', 'role 5', 'role 6', 'role 7', 'role 8', 'role 9', 'role 10', 'role 11', 'role 12', 'role 13', 'role 14', 'role 15',]
let valuesGroup1 = [{"id": 0, "text": roles[0]}, {"id": 1, "text": roles[1]}, {"id": 2, "text": roles[2]}, {"id": 3, "text": roles[3]}];
let valuesGroup2 = [];
for (index = 4; index < roles.length; index++) {
valuesGroup2.push(roles[index]);
}
var jsonGroup1 = {"text" : "Common Groups"};
jsonGroup1.children = valuesGroup1;
var jsonGroup2 = {"text" : "Other Groups"};
jsonGroup2.children = valuesGroup2;
console.log(jsonGroup1);
let group1Obj = [jsonGroup1, jsonGroup2];
return group1Obj;
}