私の現在のプロジェクトでは、提供されたセレクターに基づいて、要素とそのすべての子孫からテキストコンテンツを収集します。
たとえば、セレクター#content
を指定してこのHTMLに対して実行すると、次のようになります。
<div id="content">
<p>This is some text.</p>
<script type="text/javascript">
var test = true;
</script>
<p>This is some more text.</p>
</div>
私のスクリプトは(少し空白をクリーンアップした後)返されます:
これはいくつかのテキストです。var test = true; これはもう少しテキストです。
<script>
ただし、要素内にあるテキストノードは無視する必要があります。
これは私の現在のコードの抜粋です(技術的には、1つ以上の提供されたセレクターに基づいて一致します):
// get text content of all matching elements
for (x = 0; x < selectors.length; x++) { // 'selectors' is an array of CSS selectors from which to gather text content
matches = Sizzle(selectors[x], document);
for (y = 0; y < matches.length; y++) {
match = matches[y];
if (match.innerText) { // IE
content += match.innerText + ' ';
} else if (match.textContent) { // other browsers
content += match.textContent + ' ';
}
}
}
提供されたセレクターに一致する要素(およびその子孫)内のすべてのテキストノードを返すだけであるという点で、少し単純すぎます。<script>
私が探している解決策は、要素内にあるものを除いて、すべてのテキストノードを返します。特に高性能である必要はありませんが、最終的にはクロスブラウザ互換である必要があります。
セレクターに一致する要素のすべての子を何らかの方法でループし、要素内のもの以外のすべてのテキストノードを蓄積する必要があると想定しています<script>
。すべてのテキストノードから蓄積された文字列にJavaScriptがすでに組み込まれていると、JavaScriptを識別する方法はないようです。
(パフォーマンス/帯域幅の理由で)jQueryを使用できませんが、Sizzleセレクターエンジンを使用していることに気付いたかもしれません。そのため、jQueryのセレクターロジックを使用できます。
助けてくれてありがとう!