Вам в принципе не нужны списки, а нужен объект. Что бы обращаться к данным можно было не по индексу а по ключу
Как работать с коллекцией элементов?
-
Привет, знатоки.
Запнулся о такой простой базовый вопрос.
Например, мне нужно получить все теги <a> и <p> на странице (получаем коллекцию элементов) и по очереди по ним поскролить - отправить на вход функции БАС "Двигать мышь над элементом". Т.е. имеется коллекция элементов, а функция то на вход принимает селектор CSS или XPATH. И вот тут запинка. Я не могу работать с сущностью Элемент. Могу только с Селекторами.
(В той же самой Зенке раньше так и делал - всё в одной среде - сначала получал коллекцию элементов и потом циклом её обходил. А на каждом элементе вызывал встроенный API метод Зенки. )
Подскажите, пожалуйста, а в БАСе как это правильно реализовать? -
@someone количество элементов, есть такой экшен но появляется он только на открытой странице в браузере, либо получаете текст страницы обрабатываете его кубиком xpath он понимает и css а затем эти селекторы ставите уже в экшен где ваша мыша двигается, но только в кубике xpath и xpath на странице селекторы разные, те что в на странице в зависимости от типа сначала ставиться
>XPATH>или>CSS>а в отдельном кубике нет просто селектор как есть. экшены двигать мыш кликнуть и прочее понимают переменные, но к сожалению не поймут если это объект поэтому такVAR_YOUR_VAR.selectorнепоймут, а так поймутVAR_YOUR_VAR.
апд последнее предложение не относится к апи баса там все все понимают это только кубик, но апи баса использовать напрямую разработчик не рекомендует так как накодить можно такого, и никаких гарантий на работоспособность кода разработчик не дает.Хотя тут все так и делают, это намного удобнее получается и функционал баса раскрывается еще больше -
@lotra said in Как работать с коллекцией элементов?:
апд последнее предложение не относится к апи баса там все все понимают это только кубик, но апи баса использовать напрямую разработчик не рекомендует так
Спасибо, в нужном направлении отправил!
Конечно, удобнее писать всё в коде, вот и пытаюсь понять, что можно, а что нет :) -
@someone
сначала просто копируйте кусок из кода вникнете с синтаксис начнете разбираться в механике работы поймете главное асинхронные действия в бас, это не трудно это просто нужно четко понимать будет оно или нет у каждой конкретной переменной или любым типом данных
из апи баса происходить изменения, способ их сохранения
учите работу асинхронного кода в бас руку набьете поймете как он работает.Можно в одном кубике много чего сделать и на несколько минут или функций асинхронных и их десяток, но это неудобно, бас быстро делает, это запись дебаг он еще тормозит, и дебажить собственный код намного удобнее -
ОК. Нужные элементы я могу выбрать так: >CSS>li , h3 , p , и обращаться к ним в дальнейшем по индексу >CSS>li , h3 , p >AT>2. А если мне сначала нужно проверить видимость каждого элемента на странице, а сделать это можно через Javascript в контексте браузера, то тут как поступить?
>CSS>li , h3 , p >AT>1 == document.querySelectorAll("li , h3 , p")[0]Т.е. делаем привязку по индексу коллекции. Правильно думаю или есть способы лучше?
-
@someone пишите то что можете, но это не отработает в браузере это в экшене выполнить код, это разные действия, для браузера а выполнить js в браузере != выполнить код, там и там не работают селекторы вашего вида я не знаю способ заставить с напрямую бас, хотя я сам не доконца знаю его я изучаю его 😁
есть хорошая обертка для выполнить код https://community.bablosoft.com/topic/10383/плюшки-для-действия-выполнить-код
-
@lotra said in Как работать с коллекцией элементов?:
@someone пишите то что можете, но это не отработает в браузере это в экшене выполнить код, это разные действия, для браузера а выполнить js в браузере != выполнить код, там и там не работают селекторы вашего вида я не знаю способ заставить с напрямую бас
Я это знаю. Вы не правильно поняли моё решение. Ладно, не буду грузить. За ответы - спасибо!
-
@someone как скажете, но вот этот селектор >CSS>li , h3 , p >AT>1 это АПИ БАСА
а вот это js браузера) document.querySelectorAll("li , h3 , p")[0] как вы напрямую их собираетесь сравнивать я не знаю. конечно если назвать резулт того или иного переменной и сравнивать или там или там да можно а так это то что вы написали равнозначно друг другу но каждый из селекторов для разных сред выполнения так понятнее? Я просто думаю что это >AT>1 = )[0] -
@someone said in Как работать с коллекцией элементов?:
Я это знаю. Вы не правильно поняли моё решение. Ладно, не буду грузить. За ответы - спасибо!
Вот поэтому просим в дальнейшем скрипт прилагать. Это не сложно.
Пытаться понять что не срабатывает по описаниям сообществу намного сложнее. -
@lotra Я не буду пытаться на прямую сравнивать. Это бессмысленно :)
Я сначала соберу массив индексов элементов в контексте браузера (действие Яваскрипт) - проверю элементы на видимость, а потом буду вызывать уже только отобранные элементы по их индексу БАС API (из массива): >CSS>li , h3 , p >AT>index
Вроде бы, селекторы CSS точно также работают в JS, как и селекторы в API БАСа, форма представления только немного отличается.@lotra said in Как работать с коллекцией элементов?:
Я просто думаю что это >AT>1 = )[0]
Именно так я и собираюсь поступить!
-
@IvanM said in Как работать с коллекцией элементов?:
@someone said in Как работать с коллекцией элементов?:
Я это знаю. Вы не правильно поняли моё решение. Ладно, не буду грузить. За ответы - спасибо!
Вот поэтому просим в дальнейшем скрипт прилагать. Это не сложно.
Пытаться понять что не срабатывает по описаниям сообществу намного сложнее.Согласен. Я это учту! (просто не хотел грузить сейчас). Очень большое и искреннее спасибо за проявленное внимание к моему вопросу.