select2 占位符显示组文本和子项
select2 placeholder display group text and children
我想知道是否可以将分组数据作为输入,在 selection 之后的文本显示中添加组文本值。
让我解释一下:
我的输入数据(ajax Api请求):
{
"text": "France",
"children" : [
{
"id": 1,
"text": "Paris"
},
{
"id": 2,
"text": "Lyon"
}
]
},
{
"text": "Spain",
"children" : [
{
"id": 3,
"text": "Barcelona"
}
]
}
使用此配置:
<select class="js-available-states js-states form-control" style="width: 150px"><option></option></select>
$('.js-available-projects').select2({
placeholder: {
id: '1',
text: 'Select an option'
},
ajax: {
url: '/city',
type: "GET",
dataType: 'json',
processResults: function (data) {
return {
results: data
};
}
},
});
例如,如果我 select "Paris",在 select2 框中显示为 selection 的文本是 "Paris"。
是否可以通过添加国家名称来自定义此文本?在我的示例中,它将是 "France - Paris".
谢谢
您正在搜索 templateSelection
选项
let data = [{"text":"France","children":[{"id":1,"text":"Paris"},{"id":2,"text":"Lyon"}]},{"text":"Spain","children":[{"id":3,"text":"Barcelona"}]}]
$('.js-available-states').select2({
data: data,
placeholder: 'Select an option',
templateSelection: function(data) {
let label = $(data.element).parent('optgroup').attr('label');
label = label ? label + ' - ' : '';
return label + data.text;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/js/select2.min.js"></script>
<select class="js-available-states js-states form-control" style="width: 150px"></select>
更新:对于远程数据
$('.js-available-states').select2({
ajax: {
url: '/city',
dataType: 'json',
processResults: function(data) {
data = data.map(i => {
i.children = i.children.map(j => ({ ...j, group: i.text }))
return i
})
return { results: data };
}
},
placeholder: 'Select an option',
templateSelection: function(data) {
let label = data.group ? data.group + ' - ' : '';
return label + data.text;
}
});
我想知道是否可以将分组数据作为输入,在 selection 之后的文本显示中添加组文本值。
让我解释一下:
我的输入数据(ajax Api请求):
{
"text": "France",
"children" : [
{
"id": 1,
"text": "Paris"
},
{
"id": 2,
"text": "Lyon"
}
]
},
{
"text": "Spain",
"children" : [
{
"id": 3,
"text": "Barcelona"
}
]
}
使用此配置:
<select class="js-available-states js-states form-control" style="width: 150px"><option></option></select>
$('.js-available-projects').select2({
placeholder: {
id: '1',
text: 'Select an option'
},
ajax: {
url: '/city',
type: "GET",
dataType: 'json',
processResults: function (data) {
return {
results: data
};
}
},
});
例如,如果我 select "Paris",在 select2 框中显示为 selection 的文本是 "Paris"。 是否可以通过添加国家名称来自定义此文本?在我的示例中,它将是 "France - Paris".
谢谢
您正在搜索 templateSelection
选项
let data = [{"text":"France","children":[{"id":1,"text":"Paris"},{"id":2,"text":"Lyon"}]},{"text":"Spain","children":[{"id":3,"text":"Barcelona"}]}]
$('.js-available-states').select2({
data: data,
placeholder: 'Select an option',
templateSelection: function(data) {
let label = $(data.element).parent('optgroup').attr('label');
label = label ? label + ' - ' : '';
return label + data.text;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/js/select2.min.js"></script>
<select class="js-available-states js-states form-control" style="width: 150px"></select>
更新:对于远程数据
$('.js-available-states').select2({
ajax: {
url: '/city',
dataType: 'json',
processResults: function(data) {
data = data.map(i => {
i.children = i.children.map(j => ({ ...j, group: i.text }))
return i
})
return { results: data };
}
},
placeholder: 'Select an option',
templateSelection: function(data) {
let label = data.group ? data.group + ' - ' : '';
return label + data.text;
}
});