Вы можете добавить опции и оптгруппы в поле выбора вручную после факта с помощью jQuery. Предполагая, что ваш HTML уже доступен, вы можете сделать что-то вроде этого:
$("select").append("<optgroup label='Example'><option>Test1 </option> <option>Test 2</option></optgroup>")
Если у вас уже есть опции в элементе select, тогда нужно просто найти все те опции, которые вы хотели бы сгруппировать (возможно, с помощью имени класса или атрибута значения), а затем поместить их в заново создайте optgroup, затем добавьте optgroup в список выбора. Пример:
var optionsToGroup = $("option.groupthis");
var optGroup = $("<optgroup></optgroup>").append(optionsToGroup);
$('select').append(optGroup);
Редактировать: Основываясь на предоставленной вами скрипте, я изменил ваш код jQuery, чтобы создать оптгруппу перед опциями. Это не самый эффективный способ, но вы должны начать с того, что предоставили. Смотри http://jsfiddle.net/xUJZj
var title = $(this).find('title').text();
var optgrouping = "<optgroup label='"+title+"'></optgroup>";
var options = [];
$(this).find('value').each(function(){
var value = $(this).text();
options.push("<option class='ddindent' value='"+ value +"'>"+value+"</option>");
});
var grouping = $(optgroupting).html(options.join(''));
select.append(grouping);
Редактировать 2: Я изменил JSFiddle для использования фактического документа XML (аналогично тому, что вы предоставили). Смотрите здесь: http://jsfiddle.net/xUJZj/13/
Или соответствующий измененный код приведен ниже:
function createSelect(xml)
{
var select = $('#mySelect');
$(xml).find('menuitem').each(function(){
var title = $(this).find('title').text();
var optgrouping = "<optgroup label='"+title+"'></optgroup>";
var options = [];
$(this).find('value').each(function(){
var value = $(this).text();
options.push("<option class='ddindent' value='"+ value +"'>"+value+"</option>");
});
var group = $(optgroupting).html(options.join(''));
select.append(group);
});
select.children(":first").text("please make a selection").prop("selected",true);
}
});
}