2015-11-05 2 views
0

У меня есть XML следующего образомTrouble зацикливания дочерних узлов в Jquery

<categories> 
    <category id="1">abc</category> 
    <category id="2">eev</category> 
    <category id="3">adf</category> 
    <category id="4">ggt</category> 
</categories> 

Я хочу, чтобы петля всех дети <categories> и получить идентификатор и текст и загрузить его в поле выбора

Моего JQuery выглядит как этот

<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 
    $.get('getCategoryHandler.ashx', function (d) { 
     $(d).each(function (index) {                
      var opt = '<option value="' + $(this).attr("id") + '">' + $(this).text() + '</option>'; 
      $("#catOptions").append($(opt)).trigger("chosen:updated");                
     }); 
     return false; 
    }); 
}); 
</script> 

с этим я получаю весь текст в одном кадре, а не в петле

Я использовал find ('category'), но он очень медленный и занимает почти 10 секунд для 15 узлов категории (в IE 11)

Что случилось со сценарием, который у меня есть?

+1

Каков формат ответа, установленного в переменной 'd'? –

+0

d is [object XMLDocument] – KK99

+0

Да, но что находится внутри этого XML? –

ответ

1

Предполагая, что 'd' - ваш весь узел категорий XML. вам нужно прокрутить дочерние элементы, а не сам узел «категории». Также функция $ .each() 'предлагает 2 параметра. Индекс и сам объект. Используй это. Обратите внимание на параметр «child».

Также вы ищете атрибут 'uuid', но ваш xml, который вы вставили здесь, имел атрибут 'id'. убедитесь, что вы тянете правильные атрибуты.

<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 
    $.get('getCategoryHandler.ashx', function (d) { 
     $(d).children().each(function (index, child) {                
      var opt = '<option value="' + $(child).attr("id") + '">' + $(child).text() + '</option>'; 
      $("#catOptions").append(opt).trigger("chosen:updated");                
     }); 
     return false; 
    }); 
}); 
</script> 
+0

Спасибо @ Gregg-Duncan за ответ. К сожалению, цикл останавливается на одной итерации, и я получаю весь текст() в одном

+0

Вы уверены, что это поиск(), который потребляет все время, а не ваш вызов .ashx? Эта скрипка работает с файлом xml, который вы разместили в миллисекундах. http://jsfiddle.net/3o6h3khp/1/ –

+0

Да. Даже при использовании статического XML с поиском для обработки 30 узлов требуется 15 секунд – KK99