Четверг, 28 Июнь 2007

Javascrip и optgroup

Пришлось столкнуться с генерацией select’ов с optgroup, да так, что бы это было переносимо (opera, ie, ff).

Первое что приходит в голову, это следующий код:

function sampleAddItemsAtSelect(selectObject){
    var optgroup = document.createElement("optgroup");
    optgroup.label = "1 optgroup";
    optgroup.appendChild(new Option("item 1"));
    optgroup.appendChild(new Option("item 2"));
    selectObject.appendChild(optgroup);

    optgroup = document.createElement("optgroup");
    optgroup.label = "2 optgroup";
    optgroup.appendChild(new Option("item 3"));
    optgroup.appendChild(new Option("item 4"));
    selectObject.appendChild(optgroup);
}

Но у него есть проблема — в IE «мои items» не рендерется (нету текста, хотя выбрать их можно). Пришлось искать обходные пути, и они были найдены.

function sampleAddItemsAtSelect(selectObject){
    var optgroup = document.createElement("optgroup");
    optgroup.label = "1 optgroup";
    selectObject.appendChild(optgroup);
    selectObject.options[selectObject.options.length] = new Option("item 1")
    selectObject.options[selectObject.options.length] = new Option("item 2")

    optgroup = document.createElement("optgroup");
    optgroup.label = "2 optgroup";
    selectObject.appendChild(optgroup);
    selectObject.options[selectObject.options.length] = new Option("item 3")
    selectObject.options[selectObject.options.length] = new Option("item 4")
}

Причина такого поведения мне остается загадкой, а так же ответ на вопрос: «Как заполнить в select optgroup не по порядку?»

Написано в: 19:59 | 0 комментариев | | теги: , , | постоянная ссылка

Понедельник, 18 Июнь 2007

Задачка с xslt

В процессе работы попалась интересная (сложная) задачка на xslt:

Есть xml:

<root>
  <values>
    <value g="a" title="t1" /> 
    <value g="b" title="t2" /> 
    <value g="b" title="t3" /> 
    <value g="a" title="t4" /> 
    <value title="t5" /> 
    <value title="t6" /> 
    <value g="b" title="t7" />
  </values>
</root>

Требуется из него получить:

<root>
  <items>
    <group name="a">
      <value>t1</value>
      <value>t4</value>
    </group>
    <group name="b">
      <value>t2</value>
      <value>t3</value>
      <value>t7</value>
    </group>
    <value>t5</value>
    <value>t6</value>
  </items>
</root>

Ниже решение, которое нашел я. Если хотите — смотрите сразу, но интереснее подумать. У меня это заняло около полу часа, а у вас?

 

Написано в: 18:54 | 0 комментариев | | теги: , , , , | постоянная ссылка