2012-04-19 62 views
0

我在網頁上有一組按鈕標記,我想獲取一個內部文本爲「保存」的特定按鈕標記。 (它沒有身份證。)所以我有這個代碼轉義XML文檔中的特殊字符

var tags = document.getElementsByTagName("button"); 
for (var i = 0; i < tags.length; i++) { 
    if (tags[i].innerText === 'Save') { 
     tags[i].click(); 
     break; 
    } 
} 

當我在鉻控制檯嘗試它時,完美的作品。但我不能在我的果凍文件中包含這個(這是一個xml標記,將被處理成html;類似於jsp)

問題出在for循環中的「<」運算符此

SAXParserException:「元素的內容必須包含格式正確的字符數據或標記。」

我學會了不使用for..in循環與數組。我能做什麼?請給我建議一些解決方法。

回答

6

您解決錯誤的問題。您的問題是「在XML中包含<字符會破壞XML」。您需要了解如何正確包含這樣的字符,而不是避免在數據中出現。沒有必要避免循環的標準。

或者用CDATA標記(停止XML特殊字符(除了CDATA序列的結尾)是特殊的)來包裝該段,或者在XML中用&lt;表示<

<![CDATA[ 
for (var i = 0; i < j; i++) { 
    etc(i); 
} 
]]> 

for (var i = 0; i &lt; j; i++) { 
    etc(i); 
} 
+0

哇。這麼快!我使用CDATA的東西,所以代碼將更具可讀性。感謝您如何解決真正的問題。 – Vigneshwaran 2012-04-19 06:19:47

0

將其放在<[CDATA[ ... ]]>

編輯:語法錯誤...

+1

這不是一個CDATA標記......它是一個評論,將完全刪除代碼。 – Quentin 2012-04-19 06:10:32

+0

當然...固定它 – Fender 2012-04-19 06:15:13

1
var limit = tags.length; 

//loop until 0 (which is false) 
while(limit) { 
    if (tags[tags.length-limit].innerText === 'Save') { 
     tags[tags.length-limit].click(); 
     break; 
    } 
    limit--; 
} 
+1

這是我錯誤問題的正確答案。正如昆丁和其他人指出的那樣,我試圖解決錯誤的問題,他們給了我正確的解決方案。無論如何感謝您的答案。 – Vigneshwaran 2012-04-19 06:30:18

2

您可以用新Array.forEach方法重複,但它可以從JavaScript 1.6只:

var tags = Array.prototype.slice.call(document.getElementsByTagName("button")); 
tags.forEach(function (tag) { 
    // ... 
}); 

但真正的解決辦法是把您的密碼到<![CDATA[]]>

<code> 
<![CDATA[ 
var tags = document.getElementsByTagName("button"); 
for (var i = 0; i < tags.length; i++) { 
    // ... 
} 
]]> 
</code> 
+0

而且你不能'打破'循環。 – ThiefMaster 2012-04-19 06:12:33

+0

@ThiefMaster的確如此。 – 2012-04-19 06:15:13