Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор xml-документа, Построить селект 
:(
    Опции темы
KonstRuctor
Дата 12.7.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Есть xml-документ:
Код

<response>
<spisok1>
<option value="0">---</option>
<option value="7">Красный</option>
<option value="8" selected="selected">Зеленый</option>
</spisok1>
<spisok2>
<option value="0">---</option>
<option value="19">Железный</option>
<option value="21" selected="selected">Пластмассовый</option>
</spisok2>
</response>

Я читаю этот документ и строю селект:
Код

_select1 = document.getElementById("color");        
_select1.innerHTML = ""; 
var options = xmlDoc.getElementsByTagName("option");
for (var i=0; i<options.length; i++) {
    var value = options[i].getAttribute("value");
    var selected = options[i].getAttribute("selected");
    var text = options[i].firstChild.data;
    var option = document.createElement("option");
    var optionText = document.createTextNode(text);
    option.appendChild(optionText);
    option.setAttribute("value", value);
    if (selected == "selected"){ option.setAttribute("selected", selected); } 
    _select1.appendChild(option);
}

Вопрос: как мне разделить вывод двух селектов?
То есть в селект с id="color" должны попасть только элементы из <spisok1>.
А в другой селект должны попать элементы из <spisok2>.

Это сообщение отредактировал(а) KonstRuctor - 12.7.2010, 16:14
PM MAIL WWW ICQ   Вверх
Amphiluke
Дата 12.7.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Получите сначала ссылку на элемент spisok1 XML документа (либо через свойство childNodes, либо опять-таки через getElementsByTagName). Потом уже вызывайте метод getElementsByTagName в контексте объекта spisok1. То же самое для spisok2.

Код

var options1 = xmlDoc.getElementsByTagName("spisok1")[0].getElementsByTagName("option");
var options2 = xmlDoc.getElementsByTagName("spisok2")[0].getElementsByTagName("option");


Это сообщение отредактировал(а) Amphiluke - 12.7.2010, 18:31
PM   Вверх
ksnk
Дата 12.7.2010, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



spisok1 - spisok2 - замечательные названия для тегов. Разумнее было бы spisok name="spisok1" или что-то вроде этого.

А так - бегай рекурсивно по дереву, смотри на firstChild, nextSibling и прочие деревянные премудрости... smile


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KonstRuctor
Дата 13.7.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Я придумал такое решение поставленной задачи.
Создаю xml следующего вида:
Код

<options1>
   <color value="0">---</color>
   <color value="7" selected="selected">Зеленый</color>
   <color value="8">Оранжевый</color>
</options1>
<options2>
   <material value="0">---</material>
   <material value="7" selected="selected">Металлический</material>
   <material value="8">Пласмассовый</material>
</options2>

И разбираю его таким образом:
Код

_select4 = document.getElementById("color");        
_select4.innerHTML = ""; 
        var options = xmlDoc.getElementsByTagName("color");
        for (var i=0; i<options.length; i++) {
            var value = options[i].getAttribute("value");
            var selected = options[i].getAttribute("selected");
            var text = options[i].firstChild.data;
            var option = document.createElement("option");
            var optionText = document.createTextNode(text);
            option.appendChild(optionText);
            option.setAttribute("value", value);
            if (selected == "selected"){ option.setAttribute("selected", selected);}
            _select4.appendChild(option);
        }
        _select5 = document.getElementById("mat");        
        _select5.innerHTML = "";
        var options = xmlDoc.getElementsByTagName("material");
        for (var i=0; i<options.length; i++) {
            var value = options[i].getAttribute("value");
            var selected = options[i].getAttribute("selected");
            var text = options[i].firstChild.data;
            var option = document.createElement("option");
            var optionText = document.createTextNode(text);
            option.appendChild(optionText);
            option.setAttribute("value", value);
            if (selected == "selected"){ option.setAttribute("selected", selected);}
            _select5.appendChild(option);

Как ни странно, работает. Не мог додуматься, что в xml-документе можно именовать теги как угодно.
Не знаю, является ли такой подход правильным.
PM MAIL WWW ICQ   Вверх
ksnk
Дата 13.7.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(KonstRuctor @  13.7.2010,  13:27 Найти цитируемый пост)
Не мог додуматься, что в xml-документе можно именовать теги как угодно.

Можно сделать следующий шаг в додумывании и назвать тег именем ID того элемента, который хочет получить значение селекта.
тогда и функция заполнения получится  только одна  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0656 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.