2012-01-25 65 views
0

當試圖通過XML進行迭代並找到並返回父級的子級時,我遇到了一些與.find()和.attr()(我認爲)的爭執。 attr(value)等於函數中傳遞的內容。JQuery/XML查找並返回1行

我有什麼做的,什麼是不可以在這裏看到的,是我有大約70複選框,這些複選框的ID是=到OAData的這塊XML

<OAData value='1'> 
     <OAid>OA1</OAid> 

    <BAC_Level_1>some text</BAC_Level_1> 

    <Basel_Level_1>some text</Basel_Level_1> 

    <Basel_Level_2>some text</Basel_Level_2> 

    <Risk_Category_Level_3>some text</Risk_Category_Level_3> 
</OAData> 

的期望價值結果:期望的結果是用戶點擊一個按鈕來提交運行函數createrow(),當他們這樣做時,它將檢查複選框是否被選中,如果是,它將只遍歷XML中的這些項目其中OAData值等於被檢查的框的值。

在哪裏,我認爲這個問題是:

$(xml_list).find('OAData').each(function() { 

我不認爲我可以將其替換爲:

$(xml_list).find('OAData').each.attr('value')(function() { 

我只是想找到OAData如果OAData值屬性等於函數傳遞的是什麼。

我可能在這種馬的情況之前在某種形式的購物車 - 我不僅僅是一點點。

在問題部分代碼:

<script type="text/javascript"> 
     function buildrow(checkboxid) { 
      if(checkboxid === 'OA1'){ //This is the wrong way to go about this - need help here 
       function xml_parser(wrapper) { 
      //Construct and display preloader 
       $('<div id="preload_xml"></div>').html('<img src="images/ajax-loader.gif" alt="loading data" /><h3>Loading Data...</h3>').prependTo($('body')); 

       //Hide Content (this is sloppy but easy to customize..) 
       $(wrapper).hide(); 

     //Get XML Data 
       $.ajax({ 
         type: 'GET', 
         url: 'xml/OA.xml', 
         dataType: 'xml', 
         success: function(xml_list) { 

      //Remove preloader HTML & show data 
        $('#preload_xml').remove(); 
        $(wrapper).show(); 

      var xmlArr = []; 
      $(xml_list).find('OAData').each(function() { 
      var xml_OAval   = $(this).attr('OAval'); 
      var xml_OAid   = $(this).find('OAid').text(); 
      var xml_BAC_Level_1  = $(this).find('BAC_Level_1').text(); 
      var xml_Basel_Level_1   = $(this).find('Basel_Level_1').text(); 
      var xml_Basel_Level_2  = $(this).find('Basel_Level_2').text(); 
      var xml_Risk_Category_Level_3 = $(this).find('Risk_Category_Level_3').text(); 

       // Add matched items to an array 
       xmlArr += '<tr filterCriteria="'; 
       xmlArr += xml_OAval; 
       xmlArr += '"><td>'; 
       xmlArr += xml_OAid; 
       xmlArr += '</td><td>'; 
       xmlArr += xml_BAC_Level_1; 
       xmlArr += '</td><td>'; 
       xmlArr += xml_Basel_Level_1; 
       xmlArr += '</td><td>'; 
       xmlArr += xml_Basel_Level_2; 
       xmlArr += '</td></tr>'; 


      }); // end each loop 

       //Append array to table (this way is much faster than doing this individually for each item) 
       $(xmlArr).appendTo(wrapper +' table tbody'); 
    } // end post AJAX call operaitons 
    }); // end AJAX 
} // end function 


//Function Call 
var wrapper = '#xml_wrapper'; // Id of wrapper 
xml_parser(wrapper); 
    } 
    } 
</script> 
</head> 
<body> 
<div id="xml_wrapper"> 
    <h1 id="title">My Title</h1> 
    <h3 id="xml_dec_nav">Select a Category:</h3> 
    <div id="page-wrap"> 
     <form name "frmCat" action="index2.html" method="get"> 
      <select id="mySelect" onchange="onchange1(this.options[this.selectedIndex].value)"> 
       <option>Select a Category</option> 
      </select> 
     </form> 
        <input class="epcf" type="button" onclick="toggleDiv('epcf-wrap')" value="Options"/> 
     <input type="button" onclick="buildrow('OA1')" value="Create" /> 
     <br/> 
     </div> 
     <table> 
      <thead> 
       <tr> 
        <th class="header headerSortUp">OAid</th> 
        <th class="header">BAC Level 1</th> 
        <th class="header">Basel Level 1</th> 
        <th class="header">Basel Level 2</th> 
        <th class="header">Risk Category Level 3</th>   </thead> 
      <tbody> 
      </tbody> 
     </table> 
    </div> 
    <div id="epcf-wrap"> 
    </div> 
</body> 
</html> 

回答

0

我並不清楚地瞭解您的問題,但也許問題可以用

$(this).find('OAval').text(); 

,而不是

$(this).attr('OAval'); 
+0

類似的東西來解決但在最初的發現 - 我已更新代碼澄清 – ChadM