Войти

Показать полную графическую версию : [решено] Как скрывать на открытой вебстранице конкретный элемент содержащий строку?


Yewgeniy
08-08-2014, 13:42
Надо мне както скрывать на открытой вебстранице конкретный элемент содержащий конкретную строку.

Например, на странице форума "стопка" элементов <TABLE>....</TABLE> (не вложенные а последовательные), один из которых содержит строку QWERT
как перебрать элементы, проверить в каком встречается заданная строка и скрыть элемент?

Эдблок и эдгард вроде такую опцию не предлагают.

Если писать скрипт, то первый вопрос, как вообще прицепить скрипт к браузеру, чтобы он применялся при открытии вэбстраницы и изменял её?

Habetdin
08-08-2014, 13:45
Если писать скрипт, то первый вопрос, как вообще прицепить скрипт к браузеру, чтобы он применялся при открытии вэбстраницы и изменял её? »
UserJS - во многих браузерах если и нет поддержки "из коробки", есть расширения, реализующие данный функционал: например Greasemonkey для Firefox или Tampermonkey для Chrome. Кстати, для отладки UserJS на Presto-версии Opera удобно использовать Violent Monkey.
"стопка" элементов <TABLE>....</TABLE>, один из которых содержит строку QWERT »
Нужно найти и скрыть таблицу (table), в одной из ячеек которой (td) есть строка QWERT?

Yewgeniy
08-08-2014, 13:55
Нужно найти и скрыть таблицу (table), в одной из ячеек которой (td) есть строка QWERT? Да.

Habetdin
08-08-2014, 14:23
Yewgeniy, хотя... зачем перебирать td, если таблицы не вложенные? Вот, накатал простой пример:
// ==UserScript==
// @name Test UserJS
// @description Hides some tables
// @version 0.1
// @author Habetdin
// @homepage http://forum.oszone.net/
// @include http://forum.oszone.net/*
// @run-at document-end
// ==/UserScript==

window.addEventListener('load', function() {
var tables = document.getElementsByTagName("table");
for(var i = 0, n = tables.length; i < n; i++)
if(tables[i].innerHTML.indexOf("блядеканр") != -1)
{
tables[i].style.setProperty("display", "none", "important");
break;
}
}, false);

Скрывает последний пост с канделябром (#396) здесь (http://forum.oszone.net/post-2385192.html#post2385192) (либо - этот пост, ибо то же слово в исходнике :lol: ).
Если нужно скрыть несколько таблиц - убрать из цикла break.

Yewgeniy
08-08-2014, 14:54
Скрывает последний пост с канделябром (#396) здесь (либо - этот пост, ибо то же слово в исходнике )Пробую в хроме. Не скрывает.


показывает 1 работающий скрипт, но эффекта ноль

Habetdin
08-08-2014, 15:13
в хроме. Не скрывает »
Однако... Хром отклоняет style.display = "*** !important", принимая только значения без "!important".
Изменил метод скрытия, см. код в предыдущем посте.

Yewgeniy
08-08-2014, 15:24
Работает!

и для моей задачи тоже работает


Спасибо! :up


А как тоже самое сделать для нескольких строк?

Habetdin
08-08-2014, 16:24
для нескольких строк? »
if(tables[i].innerHTML.indexOf("строка 1") != -1 || tables[i].innerHTML.indexOf("строка 2") != -1)
Ну и убрать break, как я писал выше.

Yewgeniy
08-08-2014, 16:27
Спасибо!

а нельзя ли в tables[i].innerHTML.indexOf(????????????) вставить несколько значений?

Habetdin
08-08-2014, 16:49
Yewgeniy, можно использовать регулярные выражения:
// ==UserScript==
// @name Test UserJS
// @description Hides some tables
// @version 0.2
// @author Habetdin
// @homepage http://forum.oszone.net/
// @include http://forum.oszone.net/*
// @run-at document-end
// ==/UserScript==

window.addEventListener('load', function() {
var tables = document.getElementsByTagName("table"),
regexp = /(мадамсрет|рвотник)/i;
for(var i = 0, n = tables.length; i < n; i++)
if(regexp.test(tables[i].innerHTML))
tables[i].style.setProperty("display", "none", "important");
}, false);
Тогда здесь (http://forum.oszone.net/post-2385032.html#post2385032) пропадет уже три поста, #393-395. Но с регулярными выражениями осторожнее, тестируйте (http://regex101.com/). А если не знаете - уж лучше длинный, но надежный вариант без них :tomato2:

amohax
25-09-2015, 11:20
Подскажите как сделать почти тоже самое. Только скрыть <div class="item">, если внутри этого дива есть слово "фывфайцуа"?

Habetdin
25-09-2015, 18:30
amohax, на основе скрипта из поста #4:
window.addEventListener('load', function() {
var items = document.querySelectorAll('div.item');
for(var i = 0, n = items.length; i < n; i++)
if(items[i].innerHTML.indexOf("фывфайцуа") != -1)
{
items[i].style.setProperty("display", "none", "important");
break;
}
}, false);




© OSzone.net 2001-2012