Что нового

Скрытие элементов страницы за исключением выбранных

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Есть задача отобразить на странице только определённые элементы.
Что то типа этого, но хотелось бы более вреное решение.

Код:
#include <IE.au3>

$oIE = _IECreate('http://www.xe.com/currencyconverter/', 1)
$oObj = $oIE.Document.QuerySelector('div#contentL')
_IEBodyWriteHTML($oIE, $oObj.OuterHtml)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR [?]
Что то типа этого
Код:
#include <IE.au3>

$sFunc = "$('header, footer, [id=""leaderB""]," _
	    &"[id=""contentR""], [class=""getXEAccountContainer""]," _
	    &"[class~=""featuredProductsWrap""], [class~=""sIconsContainer""]'" _
	    &").remove();"


$oIE = _IECreate('http://www.xe.com/currencyconverter/')
$oBody = _IETagNameGetCollection($oIE, "body", 0)
$oBodyID = _IEPropertyGet($oBody, "uniqueid")
_IEHeadInsertEventScript ($oIE, $oBodyID, "onload", $sFunc)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett
Я так понял здесь удаляется лишнее (указанное).
Но мне бы хотелось просто указать нужный мне элемент (или несколько элементов), и чтобы всё остальное убралось.
И кстати желательно не удалять, а прятать (display: none?).
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR [?]
Я так понял здесь удаляется лишнее (указанное).
Да.

просто указать нужный мне элемент (или несколько элементов), и чтобы всё остальное убралось.
Во первых, вам будет нужна фиксированная структура документа. Во вторых, если вы скрываете родителя то вместе с ним исчезает и потомок.

Пример:
Код:
<!-- скрыв первый див исчезает и второй. -->
<div id="parent">
   <div id="children"></div>
</div>
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
если вы скрываете родителя то вместе с ним исчезает и потомок
Насколько я знаю, $oNode.RemoveNode(False) удаляет без вложенных элементов. Неужели нельзя также сделать для скрытия?

А что если в цикле искать все предыдущие (PreviousSibling) и следующие (NextSibling) элементы от найденного, и удалять их без вложенности?

OffTopic:
У меня есть дикое желание написать расширенную библиотеку IE, уж слишком много чего не хватает...
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Ну... можно еще считать все теги, и каждому тегу, кроме нужных нам, дописать какой нить определенный класс.
В документ добавить строку стиля с данным классом, где задать хайд.

С одной стороны структура документа не меняется совсем. От добавления класса каждому тегу отображение не изменится.
И регулируется все только доп строчкой с описанием стиля для класса.

С другой стороны более трудоемко. Проверить на отсутствие данного класса в документе (шанс минимален, если придумать вычурное название), приписать класс. Где то просто дописать очередной класс, где то включить и признак.
Ну и правильное отображение дочерних или родетелей нужно продумать и указать это в описании класса.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Можете для body прописать стиль visibility:hidden, а для нужного элемента visibility:visible
Будет так:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
inververs
Это круто!

Код:
#include <IE.au3>

$oIE = _IECreate('http://autoit-script.ru', 1)
$oIE.Document.Body.Style.visibility = 'hidden'
$oObj = $oIE.Document.QuerySelector('#smflogo')
$oObj.Style.visibility = 'visible'


Вот только бы ещё скрыть и элементы которые создаются скриптами :scratch:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Я думаю, нужно отслеживать событие создание элементов. Это можно делать через MutationObserver , Ie поддерживает его с версией 11, для более ранних нужно искать полифил. Вот еще статья https://habrahabr.ru/post/202366/
https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver#MutationObserverInit


Добавлено:
Сообщение автоматически объединено:

OffTopic:
CreatoR [?]
У меня есть дикое желание написать расширенную библиотеку IE, уж слишком много чего не хватает...
Согласен, IE UDF уже морально устарела. Единственное что там еще можно использовать так это 1 функцию, _IeAttach, все остальное - в мусор.
 
Верх