Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Удалить HTML-комментарии (https://javascript.ru/forum/events/75552-udalit-html-kommentarii.html)

tester33 18.10.2018 18:45

Удалить 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>

tester33 18.10.2018 18:58

Добавлю.
Удалить нужно только как-то определенные комментарии, например такие:
<!-- delete
<p>Text 1</p>
<p>Text 2</p>
<p>Text 3</p>
 -->


То есть "delete" будет означать, что эти комментарии нужно удалить из кода. Остальные не трогать.
Ну, или как-то по другому их определять

ksa 19.10.2018 08:59

Цитата:

Сообщение от tester33
Подскажите скрипт что-бы простейшим способом удалить символы комментариев.

На клиенте? :blink:
Или таки на сервере при формировании страницы?

SuperZen 19.10.2018 09:12

в ie так не получится... в хроме можно было читать комментарии... читать в том смысле, чтобы парсить можно из документа, а так вряд-ли сами блоки встанут на место,... надо делать финт ушами )

ksa 19.10.2018 09:36

Типа набросок... ;)

<!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>

tester33 20.10.2018 12:53

Спасибо, но на странице jquery по ряду причин нельзя. Нужен чистый Javascript.

Смысл сего извращения, спрятать от Яндекса некоторые блоки текста.
Новые алгоритмы Яндекса настолько жестоки, что накладывают санкции на страницы за якобы "не нужный посетителю текст". Так как Яндекс еще и не может выполнять Java, то пришла идея комментировать текстовые блоки, которые он "не будет видеть", а пользователь и Гугл который выполняет Java, "увидят" реальный текст

Подсказали решение задачи другим методом - с использованием JavaScript escape

Оказывается Гугл прекрасно поймет и выполнит такой код, и в индекс поместит нормальный текст.
Яндекс в силу своей тупости, не поймет, для него там текста не будет

Конечно, c удалением комментариев, было-бы лучшее решение, так как не нужно кодировать, но увы, не получилось

j0hnik 21.10.2018 00:53

<!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>

ksa 22.10.2018 08:55

Цитата:

Сообщение от tester33
но на странице jquery по ряду причин нельзя. Нужен чистый Javascript

А я тебе что показал? :blink:

SuperZen 22.10.2018 12:52

https://yandex.ru/support/webmaster/...obot/html.html

<!--noindex-->текст, индексирование которого нужно запретить<!--/noindex-->

tester33 24.10.2018 04:25

noindex пробовали сразу как только яндекс анонсировал ББ
он не спасает
ББ - это фильтр Яндекса, Баден - Баден


Часовой пояс GMT +3, время: 06:53.