特定の要素のすべての子孫要素(のテキスト)内の特定の文字列を置き換えたいと思います。
innerHTML
このシーケンスは属性に表示される可能性があるため、使用できません。XPathを使用してみましたが、インターフェイスは基本的に読み取り専用のようです。これは1つの要素に制限されているため、のような関数document.getElementsByTagName
も使用できません。
これを行う方法を提案できますか?jQueryまたは純粋なDOMメソッドはすべて受け入れられます。
編集:
いくつかの答えは、私が回避しようとしていた問題を示唆しています。要素でテキストを直接変更すると、テキスト以外のすべての子ノードが削除されます。
したがって、問題は基本的に、ツリー内のすべてのテキストノードを効率的に選択する方法にあります。XPathでは、として簡単に行うことができます//text()
が、現在のXPathインターフェイスでは、これらのテキストノードを変更することはできません。
これを行う1つの方法は、Bergiの回答に示されているように再帰を使用することです。別の方法はjQueryのセレクターを使用することfind('*')
ですが、これは少し高価です。より良い解決策があるかどうかをまだ待っています。