2012-12-14 53 views
3

新用戶和第一個問題.. 我通過嵌套each()s解析XML字符串。我找到了我正在查找的節點並更改了該屬性的值,但原來的xml字符串保持不變。JQuery - 使用嵌套的each()來更新XML字符串。原始字符串未更新

下面是XML和JQuery。查看代碼中的警報以查看更新發生的位置。無論如何,在所有的每個人已經發揮出原來的XML字符串是因爲它是?我究竟做錯了什麼?

感謝

的XML:

<Test TestID="712" UserID="1231230192831039812"> 
    <Question id="713"> 
    <AnswerSet id="718" type="5"> 
     <AnswerSetOption id="740" IsChecked="Foo" /> 
     <AnswerSetOption id="741" IsChecked="Foo" /> 
     <AnswerSetOption id="742" IsChecked="Foo" /> 
    </AnswerSet> 
    <AnswerSet id="719" type="5"> 
    <AnswerSetOption id="740" IsChecked="Foo" /> 
    <AnswerSetOption id="741" IsChecked="Foo" /> 
    <AnswerSetOption id="742" IsChecked="Foo" /> 
    </AnswerSet> 
    <AnswerSet id="720" type="5"> 
    <AnswerSetOption id="740" IsChecked="Foo" /> 
    <AnswerSetOption id="741" IsChecked="Foo" /> 
    <AnswerSetOption id="742" IsChecked="Foo" /> 
    </AnswerSet> 
</Question> 
</Test> 

腳本:

function TrackResponse(QuestionID, AnswerSetID, AnswerSetOptionID, InputType) { 

     var xml; 

     xml = $('#_uiCheckingAnswersHidden').val(); 

     $(xml).find('Question').each(function() { 

      var xmlQuestionID = $(this).attr('id'); 

      $(this).find('AnswerSet').each(function() { 

       var xmlAnswerSetID = $(this).attr('id'); 

       $(this).find('AnswerSetOption').each(function() { 

        var xmlAnswerSetOptionID = $(this).attr('ID'); 
        var checkedValue = $(this).attr('IsChecked'); 


        if (InputType == 'radio') { 

         if (QuestionID == xmlQuestionID && AnswerSetID == xmlAnswerSetID && AnswerSetOptionID == xmlAnswerSetOptionID) { 

          alert('Found it'); 

          var oldValue; 

          oldValue = $(this).attr('IsChecked'); 

          alert('Old value: ' + oldValue) 

          $(this).attr('IsChecked', 'Bar'); 

          var newValue; 

          newValue = $(this).attr('IsChecked'); 

          alert('New value: ' + newValue) 

         } 
         else { 
          $(this).attr('IsChecked', 'pp'); 
         } 
        } 

        //Checkbox -- if not found updated Checked Attribute to '' 
        if (InputType == 'check') { 

         var checked = $(this).attr('IsChecked'); 

         if (QuestionID == xmlQuestionID && AnswerSetID == xmlAnswerSetID && AnswerSetOptionID == xmlAnswerSetOptionID) { 

          if (checked == 'true') { 
           $(this).attr('IsChecked', 'dd'); 
          } 
          else { 
           $(this).attr('IsChecked', ''); 
          } 
         } 
        } 
       }); 
      }); 
     }); 

     alert(xml); 
    } 
+1

當您調用'$(xml)'時,您將創建一個新的jQuery對象,其中包含'xml'字符串中定義的節點;現在兩人完全沒有聯繫。如果你想獲得一個新的XML字符串來表示已更改的狀態,則需要從該對象中獲取它。 –

+0

謝謝安東尼。所以我將不得不再次加入所有節點並重新創建xml以獲取更新的值?有沒有簡單的方法來加入所有的節點,或者我必須創建具有更新屬性值的原始XML格式? – FredThunder

+1

我將存儲對通過調用'$(xml)'創建的jQuery對象的引用,因爲這會反映後面的更改(假設您使用該變量代替當前代碼中的任何'$(xml)'調用) 。在這裏有一些關於從一個jQuery對象獲取XML字符串的問題,所以請搜索其中的一個。 –

回答

0

您可以做上述所有,並通過引用訪問原始DOM元素,或者只需更換或使用.html(xml)或其他內容將XML內容附加到當前內容上。