Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Как скрывать на открытой вебстранице конкретный элемент содержащий строку? (http://forum.oszone.net/showthread.php?t=286182)

Yewgeniy 08-08-2014 13:42 2386568

Как скрывать на открытой вебстранице конкретный элемент содержащий строку?
 
Надо мне както скрывать на открытой вебстранице конкретный элемент содержащий конкретную строку.

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

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

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

Habetdin 08-08-2014 13:45 2386570

Цитата:

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

UserJS - во многих браузерах если и нет поддержки "из коробки", есть расширения, реализующие данный функционал: например Greasemonkey для Firefox или Tampermonkey для Chrome. Кстати, для отладки UserJS на Presto-версии Opera удобно использовать Violent Monkey.
Цитата:

Цитата Yewgeniy
"стопка" элементов <TABLE>....</TABLE>, один из которых содержит строку QWERT »

Нужно найти и скрыть таблицу (table), в одной из ячеек которой (td) есть строка QWERT?

Yewgeniy 08-08-2014 13:55 2386575

Цитата:

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

Habetdin 08-08-2014 14:23 2386593

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) здесь (либо - этот пост, ибо то же слово в исходнике :lol: ).
Если нужно скрыть несколько таблиц - убрать из цикла break.

Yewgeniy 08-08-2014 14:54 2386610

Цитата:

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


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

Habetdin 08-08-2014 15:13 2386619

Цитата:

Цитата Yewgeniy
в хроме. Не скрывает »

Однако... Хром отклоняет style.display = "*** !important", принимая только значения без "!important".
Изменил метод скрытия, см. код в предыдущем посте.

Yewgeniy 08-08-2014 15:24 2386626

Работает!

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


Спасибо! :up


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

Habetdin 08-08-2014 16:24 2386650

Цитата:

Цитата Yewgeniy
для нескольких строк? »

Код:

if(tables[i].innerHTML.indexOf("строка 1") != -1 || tables[i].innerHTML.indexOf("строка 2") != -1)
Ну и убрать break, как я писал выше.

Yewgeniy 08-08-2014 16:27 2386652

Спасибо!

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

Habetdin 08-08-2014 16:49 2386666

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);

Тогда здесь пропадет уже три поста, #393-395. Но с регулярными выражениями осторожнее, тестируйте. А если не знаете - уж лучше длинный, но надежный вариант без них :tomato2:

amohax 25-09-2015 11:20 2557483

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

Habetdin 25-09-2015 18:30 2557675

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);



Время: 16:26.

Время: 16:26.
© OSzone.net 2001-