Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   javascript для скрытия строк на странице содержащих фразу (https://javascript.ru/forum/library-toolkit-framework/74635-javascript-dlya-skrytiya-strok-na-stranice-soderzhashhikh-frazu.html)

loader77 25.07.2018 23:23

javascript для скрытия строк на странице содержащих фразу
 
многоуважаемые гуру если не сложно черкните пожалуйста javascript для хрома который на определенной странице скрывает все строки в которых есть определенный набор символов, например - "CPS."
просто боюсь у меня это получится ох как не скоро :-?

Aetae 26.07.2018 17:42

(function start(){
  var word = 'CPS.';
  
  if(document.readyState !== 'complete')
    return addEventListener('load', start);
  
  var elements = document.getElementsByTagName('*'), i = elements.length;
  while(i--){
    var nodes = elements[i].childNodes, j = nodes.length;
    while(j--) 
      if(nodes[j].nodeType === 3 && ~nodes[j].data.indexOf(word))
        elements[i].removeChild(nodes[j]);
  }
}())
По хардкору.

Nexus 26.07.2018 19:25

Aetae, я думаю для автора строка - не текстовый узел, а горизонтальная строка текста на экране.

Alexandroppolus 26.07.2018 19:54

Цитата:

Сообщение от Nexus
я думаю для автора строка - не текстовый узел, а горизонтальная строка текста на экране.

если так, то странная задача - поменяли ширину браузера, всё разъехалось..

Aetae 26.07.2018 23:33

Nexus, это наркомания, но вот тебе цензор:)
(function start(){
  var word = 'CPS.';
  
  if(document.readyState !== 'complete')
    return addEventListener('load', start);
  
  var elements = document.getElementsByTagName('*'), 
      range = document.createRange(),
      i = elements.length;
  while(i--){
    var nodes = elements[i].childNodes, j = nodes.length;
    while(j--) 
      if(nodes[j].nodeType === 3){
        var position = 0;
        while((position = nodes[j].data.indexOf(word, position)) !== -1){
           range.setStart(nodes[j], position);
           range.setEnd(nodes[j], position = position + word.length);
           censor(range);
        }
      }
  }
  range.detach();
}());

function censor(elt) {
	var rects = elt.getClientRects();
	for (var i = 0; i != rects.length; i++) {
		var rect = rects[i];
		var tableRectDiv = document.createElement('div');
		tableRectDiv.style.position = 'absolute';
		tableRectDiv.style.background = '#000';
		var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
		var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
		tableRectDiv.style.margin = tableRectDiv.style.padding = '0';
		tableRectDiv.style.top = (rect.top + scrollTop) + 'px';
		tableRectDiv.style.left = (rect.left + scrollLeft) + 'px';
		tableRectDiv.style.width = (rect.width - 2) + 'px';
		tableRectDiv.style.height = (rect.height - 2) + 'px';
		document.body.appendChild(tableRectDiv);
	}
}
Можно попробовать прям на этой странице.)

Сейчас закрывает только конкретное слово, но легко исправить стиль, чтоб закрывал всю строку. Ну и удалять куски текста с помощью range тоже не сложно, если нужно.
С изменением окна браузеа - да, придётся перерисовывать.

Nexus 27.07.2018 09:12

Цитата:

Сообщение от Aetae
но вот тебе цензор

Да он мне, как бы, нафиг не нужен :)

Aetae 27.07.2018 09:48

Цитата:

Сообщение от Nexus (Сообщение 491188)
Да он мне, как бы, нафиг не нужен :)

Тсс, он никому нафиг не нужен.)

Alexandroppolus 27.07.2018 12:01

мда... век живи век учись :)
у Ренджа оказывается есть getClientRects


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