0

我在网页上有一组按钮标签,我想获得一个特定的按钮标签,其 innerText 为“保存”。(它没有 id。)所以我有这个代码

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

当我在 chrome 控制台中尝试时,效果很好。但我不能将它包含在我的果冻文件中(这是一个将被处理成 html 的 xml 标记;类似于 jsp。)

问题在于 for 循环中的“<”运算符导致此问题

SAXParserException:“元素的内容必须由格式良好的字符数据或标记组成。”

而且我学会了不要将 for..in 循环与数组一起使用。我能做些什么?请建议我一些解决方法。

4

4 回答 4

6

你正在解决错误的问题。您的问题是“<在 XML 中包含一个字符会破坏 XML”。您需要找出如何正确地包含这样一个字符,而不是避免在您的数据中出现一个字符。没有必要避免标准的 for 循环。

要么用 CDATA 标记(阻止 XML 特殊字符(CDATA 序列的结尾除外)变得特殊)包装该部分,要么在 XML 中表示<with &lt;

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

或者

for (var i = 0; i &lt; j; i++) {
    etc(i);
}
于 2012-04-19T06:07:16.340 回答
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>
于 2012-04-19T06:08:17.943 回答
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--;
}
于 2012-04-19T06:08:08.487 回答
0

放在里面<[CDATA[ ... ]]>

编辑:错误的语法...

于 2012-04-19T06:07:11.573 回答