У меня есть select2 вроде этого:
<select id="example">
<option value=""> - </option>
<optgroup label="Private folders">
<option value="1">Folder 1 private</option>
<option value="2">Folder 2 private</option>
</optgroup>
<optgroup label="Public folders">
<option value="3">Folder 1 public</option>
<option value="4">Folder 2 public</option>
</optgroup>
</select>
Я использую плагин select2 для динамического добавления новых папок, если это необходимо.Мне нужно вставить новые папки в optgroup "Личные папки".
$('#example').select2({
tags: true,
createTag: function (params) {
return {
id: params.term,
text: params.term,
newOption: true
}
},
templateResult: function (data) {
var $result = $("<span></span>");
$result.text(data.text);
if (data.newOption) {
$result.append(" <em>(new)</em>");
}
return $result;
}
}).on('select2:select', function (e) {
var data = e.params.data;
var text = data.text;
if (data.newOption) {
if ( $('#example optgroup[label="Private folders"]').length > 0 ) {
var option = $("<option></option>");
option.val(data.ID);
option.text(text);
$('#example optgroup[label="Private folders"]').append(option);
$('#example').val(data.ID).trigger('change');
} else {
var optgroup = $('<optgroup>');
optgroup.attr('label',"Private folders");
var option = $("<option></option>");
option.val(data.ID);
option.text(text);
optgroup.append(option);
$('#example').append(optgroup);
$('#example').val(data.ID).trigger('change');
}
}
});
Так, например, если я пишу "Новая папка", мне нужно добавить его внутри optgroup
с label="Private folders"
.
Мой сценарий работает, только если optgroup "Личные папки" не существует.Если он уже существует, ничего не добавлено.
См. Мою скрипку: https://jsfiddle.net/rLmztr2d/4054/
Первая новая вставка работает.Другие новые вставки не работают ...