помогите сформировать выражение



  • получаю код элемента в инспекторе он выглядит так: <div class="overlayer"></div>

    следуя инструкции в wiki ( https://wiki.bablosoft.com/doku.php?id=ru:is_it_possible_to_execute_certain_action_depending_on_condition_if_statement ) -

    пытаюсь использовать третье выражение [[VARIABLE]].indexOf("val")<0

    Выполнять только если переменная VARIABLE содержит «val» -

    пытаюсь применить в BAS чтобы выполнить действие при этом условии внутри блока if
    if
    [[SAVED_XML]].indexOf("<div class="overlayer"></div>")<0

    на выходе получаю лог:

    [21:59:41] Поток №1 : SyntaxError: Parse error Номер строки:2 Во время выполнения скрипта {
    IF_ELSE_EXPRESSION = VAR_SAVED_XML.indexOf("<div class="overlayer"></div>")<0;
    _if(IF_ELSE_EXPRESSION,function(){
    section_insert()
    section_start("test", 58446,function(){
    })},function(){
    section_start("test", 7838,function(){ })})}

    Что не так делаю и как поправить?



  • @Turutur
    В строке <div class="overlayer"></div> уже есть двойные кавычки.

    Я сделал так и всё сработало: [[SAVED_XML]].indexOf('<div class="overlayer"></div>')<0

    UPD. Т.е. строку достаточно обернуть в одинарные кавычки.



  • @wodopad спасибо за подсказку- а я ведь знал - просто моя невнимательность, но да ладно - выражение правильное - переменная реально содержит <div class="overlayer"></div> - но действия внутри блока if все равно игнорируются и перескакивает выполнение на else - есть какие то соображения?



  • @Turutur
    если тебе нужно выполнять это только тогда , когда текст найден:
    [[SAVED_XML]].indexOf('<div class="overlayer"></div>') > -1

    indexOf возвращает позицию начала подстроки. Если не найдено, то возвращает -1

    И вообще, не нужно так проверять наличие элементом на странице. Поскольку есть замечательные возможности в BAS работа с XPATH.
    в конце Xpath -> Xpath проверить существование
    http://savepic.org/8414372.jpg

    дальше в if вставляешь [[XPATH_EXISTS]]
    она будет содержать булевое значение: true или false
    если true, то элемент был найден и условие в IF будет выполнятся.

    только один нюанс, под этот xpath также подойдет и такое: <div class="overlayer"> длвыадл тдл длыдвла д</div>
    так что если нужно, чтобы блок <div class="overlayer"> не содержал в себе ничего и был пустым, то выражение нужно такое: //div[@class='overlayer' and string-length(text())=0]



  • @Turutur

    Как написал @out , просто нужно развернуть условие, не меньше нуля (< 0), а больше -1 (> -1).

    Таким образом проверяете появление элемента во фрейме? Если не секрет)



  • @out - спасибо за подробный ответ - мне не подойдет икспас - так как class overlayer могут иметь и другие блоки фрейма и это не секрет (ответ @wodopad ) - а вот за разворот условия спасибо всем...



  • Ребята спасибо вам огромное - все получилось - так сработало. @support - пожалуйста измените запись в wiki ( http://wiki.bablosoft.com/doku.php?id=ru:is_it_possible_to_execute_certain_action_depending_on_condition_if_statement ) - третий способ проверки [[VARIABLE]].indexOf("val")<0 -->
    на
    [[VARIABLE]].indexOf("val") >-1

    так как прописанный сейчас вариант не сработал - или тайтл сделайте или объясните почему не сработал в таком виде как сейчас прописан



  • @Turutur да, тут надо исправить опечаточку http://savepic.org/8420574.jpg
    а на счет почему сработало или не сработало, то я выше описывал.

    https://learn.javascript.ru/string#поиск-подстроки



  • @Turutur Исправил.


Log in to reply