2015-03-25 2 views
1

Надеюсь, что кто-то может помочь - я новичок в js/jQuery, поэтому я надеюсь, что это действительно просто.Разбиение результата xml в выпадающем списке

Я пытаюсь заполнить выпадающий список результатом xml снизу. Функция ParseXML отлично работает и result.push (valueid + "" + значение) оставляет меня со следующим:

1, служба

2 Разбивка

Как я могу получить это в выпадающий список, пожалуйста? Использование ниже, я получаю ошибку "Объект не поддерживает свойство или метод 'разбить'"

Большое спасибо

Leddy

function testFunction() { 

var jobresults = "<resultset morerecords='0'> " + 
         "<result> " + 
          "<itt_jobtypeid>1</itt_jobtypeid> " + 
          "<itt_name>Service</itt_name> " + 
         "</result> " + 
        "<result> " + 
         "<itt_jobtypeid>2</itt_jobtypeid> " + 
          "<itt_name>Breakdown</itt_name> " + 
         "</result> " + 
        "</resultset> "; 

    var xml = parseXML(jobresults); 

    var jobid = xml.getElementsByTagName("itt_jobtypeid"); 
    var jobname = xml.getElementsByTagName("itt_name"); 
    var result = []; 

    for (var i = 0; i < jobid.length; i++) { 
     var valueid = jobid[i].childNodes[0].nodeValue; 
     var value = jobname[i].childNodes[0].nodeValue; 
     // add longitude value to "result" array 
     result.push(valueid + "," + value); 
    } 

    var jobtype = $("#ddlJobType"); 

    $.each(result, function() { 
     var arr = result.split(','); 
     for (var i = 0; i < arr.length; i++) { 
      jobtype.append($("<option />").val(arr[0]).text(arr[1])); 
     } 
    }); 

} 

function parseXML(text) { 
    if (window.DOMParser) { 
     parser = new DOMParser(); 
     doc = parser.parseFromString(text, "text/xml"); 
    } 
    else { // Internet Explorer 
     doc = new ActiveXObject("Microsoft.XMLDOM"); 
     doc.async = "false"; 
     doc.loadXML(text); 
    } 
    return doc; 
} 

ответ

1

Это может быть проще и чище, если оптимизировать структуру данных для result массива. Нажмите объект со значением и меткой, чтобы вы могли просто использовать метод attr непосредственно после:

for (var i = 0; i < jobid.length; i++) { 
    var valueid = jobid[i].childNodes[0].nodeValue; 
    var value = jobname[i].childNodes[0].nodeValue; 
    // add longitude value to "result" array 
    result.push({value: valueid, label: value}); 
} 

var jobtype = $("#ddlJobType"); 

$.each(result, function (i, obj) { 
    $('<option>').attr(obj).appendTo(jobtype); 
}); 
0

См https://api.jquery.com/jquery.each/. Функция обратного вызова получает каждый тип работы в качестве параметра функции. Попробуйте изменить код:

$.each(result, function (idx, value) { 
    var arr = value.split(','); 
    for (var i = 0; i < arr.length; i++) { 
     jobtype.append($("<option />").val(arr[0]).text(arr[1])); 
    } 
}); 
Смежные вопросы