2011-10-23 38 views
0

我有4個xml塊,我想解析一下jQuery使得一個ajax調用。現在四個xml塊彼此不同(但結構相同)。我試圖通過傳遞一個id到每個xml塊來解析這個xml,但是在我的ajax調用中,我無法檢索id屬性,因爲它是我需要捕獲以傳遞給ajax函數的第一件事。通過傳遞一個id來解析jQuery中的XML

我想是這樣的:

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的,的ID等,人

Ajax是這裏:

$("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

如果我已經很好地理解了你,下面應該會發生(輸出粗體):

  • <test id="IDHERE">應該填充<select ID="IDHERE">
  • <optionheading>應該創建<optgroup>標籤如在<heads>
  • 每個<optgroup>限定填充有<option>元件,根據給定的<values>元件

下面的代碼是按要求實現此想法的jQuery方法。

注:$('test', xml)$(xml).find('test')的簡寫。
注2:由於ID必須是唯一的,因此select#yourID等於#yourID
注3:此腳本不需要XML中的<values>標記。執行後

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"> 
    ... 
+0

Actuallly我只需要處理測試的第一個塊。讓我解釋一下,我將測試塊中的選項拉到下拉列表中,另一個測試塊拉到另一個下拉列表中等等。這些下拉菜單相互依賴 – Mike

+0

@Mike更新回答。 –

+0

嘿羅布,其實我正在尋找代碼的可重用性/可移植性。我不想每次添加東西時都要更改我的javacript。相反,我只想更新我的XML並讓jquery照顧它。就像我在我的劇本中通過傳遞一個ID – Mike