Мой текущий проект включает сбор текстового содержимого элемента и всех его потомков на основе предоставленного селектора.
Например, если указан селектор #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>
.
Это отрывок из моего текущего кода (технически он совпадает на основе одного или нескольких предоставленных селекторов):
// 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, когда он уже свернут в строку, собранную из всех текстовых узлов.
Я не могу использовать jQuery (по соображениям производительности / пропускной способности), хотя вы, возможно, заметили, что я использую его механизм выбора Sizzle, поэтому доступна логика выбора jQuery.
Заранее спасибо за любую помощь!