0

現在、フォームも含まれているページのプレーンテキストを置き換えようとしています。フォームを含むコードを置き換えると、フォーム要素が再作成されることを認識しています。これはフォームを壊す可能性があります(そしてそれは私が操作しているウェブページで起こります)。

通常、これは「getElementsByTagName」関数を使用して行い、フォームを含むコードを置き換える必要がないことを確認します。これは、これまで常に可能でした。ただし、この時点で、最小のタグ名が、置き換える必要のあるテキストとフォームを含むdivであるページに到達しました。このdivはさらにテーブルに分割されているので、最初は「要素をテーブルごとに取得しよう」と思っていましたが、正確に置き換える必要のある部分はテーブルに分割されていません。

だから私はこのコードを使って置き換えました:

document.documentElement.innerHTML = document.documentElement.innerHTML.replace(RegEx, replaceString);

もちろん、これはページ上のフォームを壊しますが、これは望ましくない動作です。

フォームを壊さずにこれを実行する方法を誰かが知っていますか?どういうわけか、テーブルを含まないdivの部分への参照を取得することは可能ですか?コードの一部だけを変更することは可能ですか?今、私はコードのインスタンスを取得し、インスタンス内の一致を置き換えてから、元のコードを変更されたインスタンスで上書きします。別のページを試したことを覚えていdocument.documentElement.innerHTML.replace(RegEx, replaceString);ますが、これは変更されたコードのインスタンスのみを返し、元のコードは変更しませんでした。

これはページの一部です:

<div class="BoxContent" style="background-image:url(http://static.tibia.com/images/global/content/scroll.gif);">
<TABLE></TABLE>
<BR>
Some text here.
<BR>
And some more.
<table></table>
<table></table>
</div>

テーブル間のテキストにいくつかの変更を加える必要があります。

私はSOを見回して、innerHTMLを使用してフォームに物を追加することについて同様の質問を見つけましたが、これは私の原因にはなりませんでした。だから、すべての助けはここでありがたいです!

ケネス

4

1 に答える 1

1

ここで-プレーンJS

デモ

window.onload=function() {
  var nodes = document.getElementsByClassName("BoxContent")[0].childNodes;
    for (var i=0,n=nodes.length;i<n;i++) {
        if (nodes[i].nodeType==3) {
            // console.log(nodes[i].textContent)
            nodes[i].textContent=nodes[i].textContent.replace(/some/gi,"Lots");
        }
    }
}
于 2013-01-27T13:25:24.503 に答える