Что нового

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

CreatoR

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

Код:
#include <IE.au3>

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

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
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 473
Репутация
2 403
Garrett
Я так понял здесь удаляется лишнее (указанное).
Но мне бы хотелось просто указать нужный мне элемент (или несколько элементов), и чтобы всё остальное убралось.
И кстати желательно не удалять, а прятать (display: none?).
 

Garrett

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

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

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

CreatoR

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

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

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

mef-t

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

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

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

inververs

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
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
Репутация
464
Я думаю, нужно отслеживать событие создание элементов. Это можно делать через 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, все остальное - в мусор.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Верх