@vlatek
Digital Nomad

Поиск элемента по тексту document.querySelector, какой селектор подобрать?

Пытаюсь сделать эмуляцию клика, найдя элемент по тексту в нем. Как правильно написать селектор? Пробовал разные конструкции, наподобие этой:

setTimeout(function() {
  let link = document.querySelector("//*[text()='Search FragmentX']"); 
  link.click(); 
});


outerHTML элемента
<label for="x-auto-1558" htmlfor="x-auto-1558" class="x-form-cb-label" style="position: relative; left: 0.78479px; top: -0.0104141px;">Search FragmentX</label>

Full XPath
/html/body/div[4]/div[2]/div[1]/div/div/div/div/div[2]/div[1]/form/div[1]/div[1]/div/table/tbody/tr[3]/td/div/label

Поиск по ID и прочим стандартным параметрам не вариант
  • Вопрос задан
  • 3706 просмотров
Решения вопроса 1
@vlatek Автор вопроса
Digital Nomad
Решение
setTimeout(function() {
  let link = document.querySelectorAll('label');  //собираем все элементы label в nodelist
  link = Array.from( link ).filter( e => (/Текст/i).test( e.textContent ) ); //переводим в массив и фильтруем по тексту
  link[0].click();  //кликаем по первому элементу массива
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alekciy
@alekciy
Вёбных дел мастер
Сам Xpath некорректный. //*[text()='Search FragmentX'] вернет безымянный текстовой узел содержащий данный текст (т.е. даже не label, а узел внутри этого label). А на нем onclick может и не быть. Еще есть вариант, что в момент вызова данного кода и клика в DOM еще нет обработчика. Потому что не понятно, каким образом вызывается этот код и в какой момент.

А если завязаться на класс x-form-cb-label (на правах эксперимента), то такой клик срабатывает?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы