Удалить HTML-комментарии
Приветствую !
Подскажите скрипт что-бы простейшим способом удалить символы комментариев. То есть имеем : <!-- <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> После загрузки документа, на выходе должны получить: <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> |
Добавлю.
Удалить нужно только как-то определенные комментарии, например такие: <!-- delete <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> То есть "delete" будет означать, что эти комментарии нужно удалить из кода. Остальные не трогать. Ну, или как-то по другому их определять |
Цитата:
Или таки на сервере при формировании страницы? |
в ie так не получится... в хроме можно было читать комментарии... читать в том смысле, чтобы парсить можно из документа, а так вряд-ли сами блоки встанут на место,... надо делать финт ушами )
|
Типа набросок... ;)
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <!-- <script src='https://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> </style> <script type='text/javascript'> window.addEventListener('DOMContentLoaded', function() { var o=document.body.childNodes; var re=/^\s*delete/; for (var i=0; i<o.length; i++) { if (o[i].nodeType == Node.COMMENT_NODE) { var com=o[i].nodeValue; if (re.test(com)) { com=com.replace(re,''); alert(com); // тут можно разобрать текст на теги и вставлять их в ДОМ o[i].parentNode.removeChild(o[i]); } }; }; }); </script> </head> <body> <p>Comment 0</p> <!-- delete <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> <p>Comment 1</p> <!-- <p>Text 4</p> <p>Text 5</p> <p>Text 6</p> --> </body> </html> |
Спасибо, но на странице jquery по ряду причин нельзя. Нужен чистый Javascript.
Смысл сего извращения, спрятать от Яндекса некоторые блоки текста. Новые алгоритмы Яндекса настолько жестоки, что накладывают санкции на страницы за якобы "не нужный посетителю текст". Так как Яндекс еще и не может выполнять Java, то пришла идея комментировать текстовые блоки, которые он "не будет видеть", а пользователь и Гугл который выполняет Java, "увидят" реальный текст Подсказали решение задачи другим методом - с использованием JavaScript escape ![]() Оказывается Гугл прекрасно поймет и выполнит такой код, и в индекс поместит нормальный текст. Яндекс в силу своей тупости, не поймет, для него там текста не будет Конечно, c удалением комментариев, было-бы лучшее решение, так как не нужно кодировать, но увы, не получилось |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div> <p>Comment 0</p> <!-- delete <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> <p>Comment 1</p> <!-- <p>Text 4</p> <p>Text 5</p> <p>Text 6</p> --> <!-- delete <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> </div> <script> document.querySelectorAll('*').forEach(el=>{ while(el = el.nextSibling){ if(el.nodeType === 8 && /^delete/.test(el.textContent.trim())) { var fragment = document.createRange().createContextualFragment(el.textContent.trim().replace(/^delete/, '')); el.parentNode.replaceChild(fragment, el); } } }); </script> </body> </html> |
Цитата:
|
https://yandex.ru/support/webmaster/...obot/html.html
<!--noindex-->текст, индексирование которого нужно запретить<!--/noindex--> |
noindex пробовали сразу как только яндекс анонсировал ББ
он не спасает ББ - это фильтр Яндекса, Баден - Баден |
j0hnik, спасибо
то, что надо ! |
А как-бы этот js вынести во внешний файл?
Что-то во внешнем файле у меня он не заработал. Цитата:
|
tester33,
обернуть в load |
спасибо,
но я хотел добавить функцию в уже существующий js-файл, который указан в html <script src="test.js"></script> то есть, в тtest.js сделал так function myTxt(){ document.querySelectorAll('*').forEach(el=>{ while(el = el.nextSibling){ if(el.nodeType === 8 && /^delete/.test(el.textContent.trim())) { var fragment = document.createRange().createContextualFragment(el.textContent.trim().replace(/^delete/, '')); el.parentNode.replaceChild(fragment, el); } } }); } window.onload = function(){ myTxt(); } что не так ? |
tester33,
не копируйте тему целиком. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> addEventListener('load', function() { document.querySelectorAll('*').forEach(el=>{ while(el = el.nextSibling){ if(el.nodeType === 8 && /^delete/.test(el.textContent.trim())) { var fragment = document.createRange().createContextualFragment(el.textContent.trim().replace(/^delete/, '')); el.parentNode.replaceChild(fragment, el); } } }); }); </script> </head> <body> <div> <p>Comment 0</p> <!-- delete <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> <p>Comment 1</p> <!-- <p>Text 4</p> <p>Text 5</p> <p>Text 6</p> --> <!-- delete <p>Text 1</p> <p>Text 2</p> <p>Text 3</p> --> </div> </body> </html> |
tester33, вообще должна работать
чтобы лишние сущности не плодить сделайте так. window.addEventListener('load', function() { document.querySelectorAll('*').forEach(el=>{ while(el = el.nextSibling){ if(el.nodeType === 8 && /^delete/.test(el.textContent.trim())) { var fragment = document.createRange().createContextualFragment(el.textContent.trim().replace(/^delete/, '')); el.parentNode.replaceChild(fragment, el); } } }); }); |
Часовой пояс GMT +3, время: 17:34. |