Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   как реализовать в браузере display:none по ключевым словам для блоков (https://javascript.ru/forum/css-html/48780-kak-realizovat-v-brauzere-display-none-po-klyuchevym-slovam-dlya-blokov.html)

wlad2 16.07.2014 16:59

как реализовать в браузере display:none по ключевым словам для блоков
 
есть DIV блоки, их на странице много,
нужно скрывать те в которых встречаются ненужные слова

для примера слово "КОФЕ" такой блок должен display:none получать


<div class="teaser">
	<a href="#" class="viewinfo" style="color:#000;text-decoration: none;">
		
		<p></p>
		
		<img class="teimage" src="/images/gigamega.ru/62489_200.jpg">
		
		<div> Похудение с&nbsp;помощью 25&nbsp;. БЕЗ кофе&nbsp;и... </div>
		
		<p style="height:20px;margin:0;">gigamega.ru</p>
		<input type="hidden" value="" rel="nofollow">
		<input type="hidden" value="24.02.2014">
		<input type="hidden" value="26.02.2014">
		<input type="hidden" value="601">
		<input type="hidden" value="">
		<input type="hidden" value="Россия, Казахстан">
		<input type="hidden" value="9.37 Kb">
		<input type="hidden" value="200x200">
		<input type="hidden" value="2">
		<input type="hidden" value="000193eefdfb6fdbf701e17cf">
		<input type="hidden" value="2260869">
		<!-- <input type="hidden" value="" /> -->
	</a>
		<span>26.02.2014 <a href="#" class="viewinfo"><img src="/images/eye.png"></a> (601) <input class="zipcheck" id="zip_2260869" type="checkbox"></span>
		
	
</div>



есть ли плагины для FF или Хрома которые подобное помогут реализовать
может у кого есть готовое решение для таких махинаций, помогите..

newobject 17.07.2014 14:44

Если без учета вложенных элементов, это легко, вроде

divs=document.getElementsByTagName("div")
for(i in divs){if(/coffee/.test(divs[i].innerHTML)) divs[i].style.display="none"}


А так, регекспами решать наверное надо, я в них не силен.

рони 17.07.2014 15:43

newobject, вот такая кнопа есть


и это принципиально перебор делать через in а не обычным for?

newobject 17.07.2014 15:55

Цитата:

Сообщение от рони
вот такая кнопа есть

Какая разница? Это мельтешение только мешает. Не люблю свистопеределки.
Цитата:

Сообщение от рони
и это принципиально перебор делать через in а не обычным for?

Просто ясней. Если ему скорость нужна, сам перепишет. К тому же for in - это JS-way, по моему.:)

рони 17.07.2014 16:27

newobject,
то есть вам пофигу как выглядит сам код и рабочий ли он, главное подкинуть идею решения - ок:(

wlad2 18.07.2014 01:25

Цитата:

Сообщение от newobject (Сообщение 321461)
Если без учета вложенных элементов, это легко, вроде

divs=document.getElementsByTagName("div")
for(i in divs){if(/coffee/.test(divs[i].innerHTML)) divs[i].style.display="none"}


А так, регекспами решать наверное надо, я в них не силен.

большое спасибо за решение,
только как подключить сей JS к примеру в FF

есть страница с блоками она уже загружена в браузере, как к ней применить сей JS?

newobject 18.07.2014 02:52

wlad2,
Я не совсем понял какие именно блоки надо скрывать. Если внешний, полностью, и если все скрываемые блоки имеют структуру
<body>
<div></div>
<div></div>
<div></div>
</body>
то это решение подойдет. Если же надо скрывать блоки произвольного уровня вложенности
<body>
<div></div>
<div><div></div</div>
<div><div><div></div</div></div>
</body>
-- то нет. А подключайте обычно -- внешним скриптом, или в конце тега body в <script></script>, не важно. как только подключите все будет работать. например

<body>

<div>foo кофе bar coffee baz</div>
<div>foo bar ягоды salad бараны baz</div>
<div>Видимый тег</div>
<div>foo bar сахар salad baz</div>
<script>
onload=function(){
var divs=document.getElementsByTagName("div")
for(var i in divs){
if(divs.hasOwnProperty(i)){
if(/кофе|ягоды|сахар/.test(divs[i].innerHTML)) divs[i].style.display="none"}
}}
</script>
</body>

newobject 18.07.2014 03:07

Цитата:

Сообщение от wlad2
есть страница с блоками она уже загружена в браузере, как к ней применить сей JS?

Или я вас неправильно понял. Вы хотите скрывать блоки с рекламой, сделать что-то вроде фильтра? Тогда это решение Вам не подойдет. Во-первых, в том же фф там надо писать плагин или расширение, ЕМНИП, просто так произвольный js, он не даст выполнять. Во вторых, на страницах разных может быть разные структуры, разные блоки, не только дивы, и многократная вложенность, динамическая подгрузка и прочее. Там очень сложный код нужен, парой строк там не обойдешься.

Aetae 18.07.2014 12:32

newobject, f12 и выполняй себе любой js.
Для подключения скрипта на постоянной основе есть greasemonkey.
А для фильтрации рекламы ничего лучше adblock пока не придумали.(с плагином element highlighter если ручками сложно нужные элементы блочить)

wlad2 18.07.2014 16:52

Вложений: 1
пишет ошибку == Метод getPreventDefault() является устаревшим. Для его замены используйте метод defaultPrevented

Вложение 2283

newobject 18.07.2014 17:00

wlad2,
Эта ошибка по-моему, данного кода не касается. Это где-то на странице у вас ошибка.

wlad2 18.07.2014 17:43

Цитата:

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

пока понял как запускать скрипты в FF

по поводу скрипта if(/Сода/.test(divs[i].innerHTML
как перечислить правильно ключи if(/Сода/КОФЕ/годжи/.test(divs[i].innerHTML
?


$(function () {
($('.viewinfo').phrases = ['кофе', 'сода', 'ягоды']{$('.viewinfo').style.display="none"}
}


подскажите как всетаки скрывать ДИВЫ в которых есть ключи типа 'кофе', 'сода', 'ягоды'

newobject 18.07.2014 18:19

Цитата:

Сообщение от wlad2
как перечислить правильно ключи

вот так, вроде

/вода|снег/i

i на конце - это если надо игнорировать разницу между большими и маленькими буквами.

PS Если возникнут проблемы, регекспы неправильно будут себя вести, проветьте, на всякий случай, соответствие кодировок документа, декларации в теге head и скрипта. С русскими символами бывают проблемы тоже.

newobject 18.07.2014 18:34

Цитата:

Сообщение от wlad2
подскажите как всетаки скрывать ДИВЫ в которых есть ключи типа 'кофе', 'сода', 'ягоды'

Я вам показывал

<html>
<head>
</head>
<body>

 <div>foo кофе bar coffee baz</div>
 <div>foo bar ягоды salad бараны baz</div>
 <div>Видимый тег</div>
 <div>foo bar сахар salad baz</div>
 <script>
 onload=function(){
 var divs=document.getElementsByTagName("div")
 for(var i in divs){
 if(divs.hasOwnProperty(i)){
    if(/кофе|ягоды|сахар/.test(divs[i].innerHTML)) divs[i].style.display="none"}
    }}
 </script>
</body>
</html>

Тут че-то не запускается, run не буду ставить, но в браузере у меня работает.

ЗЫ Упс! В ФФ ругань на __proto__=null почему то. Убрал, заработало. Надо по хорошему, тогда добавить hasOwnProperty. Ща перепишу.

UPD исправил

Erolast 19.07.2014 09:28

Ты гонишь. Нету никакой ругани.


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