Показать сообщение отдельно
  #14 (permalink)  
Старый 15.11.2017, 12:44
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от Nikolay37
В логике все хорошо, поскольку нужно проверить несколько элементов.
let baseName = "apple,pineapple,translate".split(',')
let i = 0
let n = 0

function start() {
    for (i; i < document.getElementsByClassName('name').length; i++) {
        if (document.getElementsByClassName('name')[i].innerText == baseName[n]) {
            document.getElementsByClassName('name')[i].click()
        }

        if (n < baseName.length - 1) {
            i = 0
            n++
            start()
        }
    }
}

Что тут хорошего?
Вы пытаетесь в 6-й строке пробежаться по всем элементам с классом "name", но сразу же в конце первой итерации вызываете эту функцию вновь сбрасывая счетчик "i" и инкрементируя значение "n". Т.е. при втором вызове этой функции проверяться будет снова первый элемент с классом "name", но уже искомое значение будет другим.
После того, как счетчик "n" превысит baseName.length продолжат выполняться предыдущие циклы. Они будут проверять соответствие контента элементов (начиная со второго и до конца) с классом "name", но т.к. n==baseName.length, то искать циклы будут элемент, чей контент равен null. Т.е. условие для элементов с индексом > 1 никогда не выполнится, поскольку строка никогда не будет равна null (равна !== эквивалентна).

Upd. [][1]===undefined, т.е. в тексте выше "null" читайте как "undefined", но сути не меняет.

Последний раз редактировалось Nexus, 15.11.2017 в 12:54.
Ответить с цитированием