Разобрать XML в jQuery, передав идентификатор - PullRequest
0 голосов
/ 23 октября 2011

У меня есть 4 блока xml, которые я хочу проанализировать, когда jQuery выполняет один вызов ajax. Теперь четыре блока xml отличаются друг от друга (но структура одинакова). Я пытаюсь разобрать этот xml, передавая id каждому из блоков xml, но в моем вызове ajax я не могу получить атрибут id, так как это первое, что мне нужно захватить, чтобы перейти к функции ajax.

Я пробовал что-то вроде этого:

XML здесь:

       <dropdown>
            <test id="1">
            <optionheading>
                <heads>Heading 1</heads>
                            <value>
                                    <values images='images/1.gif'>Option1</values>
                                    <values images='images/2.gif'>Option2</values>
                                    <values images='images/3.gif'>Option3</values>
                            </value>
            </optionheading>
    .....................................

    ............................
    </test>
    <test id='2">
    <optionheading>
                <heads id="b">H..................
    ..................
    ............
    </test>
</dropdown>

Мне нужно получить идентификатор test1, test2 и др.

Аякс здесь:

$("document").ready(function() {
                $.ajax({ 
                    type: "GET",
                    url:"dropdown.xml",
                    dataType: "xml",
                    success :function(xml) {
                        var select = $("#mySelect"); 
                        //I am getting id here
                        var id=$(xml).find('test').attr('id'); 

                        $(xml).find('test'+id).each(function() {
                            $(this).find('optionheading').each(function() {
                            var opthead = $(this).fin......................

1 Ответ

1 голос
/ 23 октября 2011

Если я вас хорошо понял, должно произойти следующее (вывод жирным шрифтом):

  • <test id="IDHERE"> должно заполнить <select ID="IDHERE">
  • <optionheading> должен создать <optgroup> с меткой , как определено в <heads>
  • Каждый <optgroup> заполнен <option> elements, в соответствии с заданными <values> elements

Приведенный ниже код является методом jQuery для реализации этой идеи в соответствии с запросом.

Примечание: $('test', xml) является сокращением для$(xml).find('test').Примечание 2: Поскольку идентификатор должен быть уникальным, select#yourID равно #yourID.Примечание 3: тег <values> в XML не является обязательным для этого сценария.

success: function(xml){
    //Loop through each `<test>`
    $('test', xml).each(function(test_index){
        var id = $(this).attr('id'); //Get the ID of the `<test>`
        // Select <select> element with ID `ID` using the `select#ID` selector
        var select = $('select#' + id);
        $('optionheading', this).each(function() {
            $('values', this).each(function(){
                var $values = $(this);
                $('<option>')
                    .val($values.attr('images'))
                    .text($values.text())
                    .appendTo(optgroup);
            });
            $('<optgroup>')
                .attr('label', $('heads', this).text())
                .appendTo(select);
        });
    });
}

Возможный HTML после выполнения:

<select id='1'>
    <optgroup label='Heading 1'>
        <option value='images/1.gif'>Option1</option>
        <option value='images/2.gif'>Option2</option>
        <option value='images/3.gif'>Option3</option>
    <optgroup>
    ....
</select>
<select id="2">
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...