0

Web ページに一連のボタン タグがあり、innerText が「保存」である特定のボタン タグを 1 つ取得したいと考えています。(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 に答える