Вот пример:
http://www.spookandpuff.com/examples/optGroup.html
А вот функция, которая адаптирована от вашей первоначальной:
function addOption(selectbox, contents, cl )
{
var addNode = selectbox; //Cache the selectbox, in case we're only adding a single, ungrouped, option.
if (contents.length > 1) { //If we're adding a group
addNode = document.createElement("OPTGROUP"); //Set the node to add to to a new optgroup.
addNode.label = contents[0]; //Use the first label (a string) as the group's label.
contents.shift(); //Remove the label from the array (so it doesn't get re-used)
}
for (var i=0;i < contents.length;i++) {
var optn = document.createElement("OPTION");
optn.text = contents[i][0];
optn.value = contents[i][1];
if (cl==1){ optn.className = "nav_option_main"; }
addNode.appendChild(optn); //Append this option to either the selectbox, or the group.
}
if (contents.length > 1) { //If we've just added a group, we need to add the group to the select box.
selectbox.appendChild(addNode);
}
}
Эта версия принимает параметр «содержание», а не отдельные параметры для «текст» и «значение» - это принимает массив из одного или нескольких параметров. Итак, чтобы добавить один параметр, а не как часть группы, сделайте следующее:
var singleOption = [
['singleOption', 1]
];
addOption(document.getElementById('selector'), singleOption, 0);
Элемент в массиве содержимого сам по себе является массивом из двух элементов - текста и значения.
Если вы сложите более одного из них в массив содержимого, вы создадите optGroup:
var optionGroup1 = [
'Group Title',
['groupOne.one', 1],
['groupOne.two', 2],
['groupOne.three', 3],
['groupOne.four', 4],
['groupOne.five', 5]
];
addOption(document.getElementById('selector'), optionGroup1, 0);
Первый элемент - это заголовок группы, после этого он просто повторяет то же содержимое, что и отдельный элемент. Когда функция обнаруживает, что вы пытаетесь добавить более одного за раз, она группирует их вместе.
Это то, что вы ищете?