Как удалить каждый текст с сайта с помощью Javascript
Я хочу иметь функцию Javascript, которая удаляет каждый текст с веб-сайта. Основанием для этого является то, что для сравнения внешнего вида визуализированного DOM в разностных браузерах мне нужно было раньше устранить очевидные различия. Поскольку рендеринг шрифтов - известная разница, я хочу удалить каждый текст. Решения, которые я нашел, всегда были такими:
if(start.nodeType === Node.TEXT_NODE)
{
start.parentNode.removeChild(start);
}
Но это только удаляет чисто текстовые узлы. Я также хочу найти такие конструкции, как:
<div>
<p>
<em>28.11.2014</em>
<img></img>
Testtext
<span>
<i>Testtext</i>
Testtext
</span>
</p>
</div>
Где элемент, содержащий текст, также содержит дочерние элементы, такие как или. Таким образом, элемент не распознается как текстовый узел.
Так что я в основном хочу превратить вышеупомянутый DOM в это:
<div>
<p>
<em></em>
<img></img>
<span>
<i></i>
</span>
</p>
</div>
3 ответа
Вы можете попробовать что-то вроде этого.
демонстрация
HTML:
<div id="startFrom">
<p>
<em>28.11.2014</em>
<img></img>
Testtext
<span>
<i>Testtext</i>
Testtext
</span>
</p>
</div>
JavaScript:
var startFrom = document.getElementById("startFrom");
function traverseDom(node) {
node = node.firstChild;
while (node) {
if (node.nodeType === 3) {
node.data = "";
}
traverseDom(node);
node = node.nextSibling;
}
}
traverseDom(startFrom);
console.log(startFrom);
С Jquery.. ДЕМО
$('selecter').find("*").contents().filter(function() {
return this.nodeType == 3;
}).remove();
Этот код ниже примерно проверен, но вы можете попробовать поместить его во внешний файл.js и выполнить его из документа при загрузке.
function cleantxt()
{
var htmlsrc = document.documentElement.outerHTML;
var htmlnew = '';
var istag = false;
for(i=0; i<htmlsrc.length; i++) {
if(htmlsrc.charAt(i)=='<') {
istag = true;
htmlnew = htmlnew + htmlsrc.charAt(i);
}
else if(htmlsrc.charAt(i)=='>') {
istag = false;
htmlnew = htmlnew + htmlsrc.charAt(i);
}
else if(istag) {
htmlnew = htmlnew + htmlsrc.charAt(i);
}
}
document.getElementsByTagName("html")[0].innerHTML = htmlnew + 'Cleaned'; // just a signature to see it works
}