Я хочу найти все TEXT или HREF, совпадающие с RegExp, в документе HMTL и обернуть их тегом (например, преобразовать обычный текст в ссылки).
Рассмотрим следующий HTML:
<body>
<!-- test1 <div>test2 <a href="test3">test4</a></div> -->
test5
<a href="test6">notest</a>
<div>
test8
<p>
test9 notest test10
<a href="notest">test12</a>
<input type="text" name="test13">test14</input>
</p>
test15
</div>
</body>
Тогда это будет моей необходимой заменой:
<body>
<!-- test1 <div>test2 <a href="test3">test4</a></div> -->
<div class="wrapped">test5</div>
<div class="wrapped"><a href="test6">notest</a></div>
<div>
<div class="wrapped">test8</div>
<p>
<div class="wrapped">test9</div> notest
<div class="wrapped">test10</div>
<div class="wrapped"><a href="notest">test12</a></div>
<input type="text" name="test13">test14</input>
</p>
<div class="wrapped">test15</div>
</div>
</body>
Обратите внимание, что тесты 5, 6, 8, 9, 10, 12, 15
обернуты.
Недопустимо вставлять в поля ввода или любые другие специальные теги HTML, которые не отображаются (например, <script>
<doctype>
и т. д.)
До этого я работал с принципом стека:
Вставить тело в стек.
e = stack.pop()
.
Поместить все дочерние элементы e
элемента типа в стек, кроме ссылок (<a>
узлов) и элементов class="wrapped"
.
Проверьте все оставшиеся e.children
ссылки типа для совпадения href
или текста и переноса.
Завершение всех внутренних совпадений во всехe.children
типа текста.
Если стек не пуст, перейдите к 2.
Завершено
JavaScript требуется только для запуска в Firefox 8.
Я хотел бы выполнить перенос без обхода дерева, линейный будет оптимальным