Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.06.2025, 19:12
Интересующийся
Отправить личное сообщение для Trulala Посмотреть профиль Найти все сообщения от Trulala
 
Регистрация: 20.12.2015
Сообщений: 11

Не находится элемент на странице
Здравствуйте. Ситуация такая: на странице есть кнопка, по нажатию на которую в html добавляется несколько новых тегов span с текстом (теги появляются, я проверял). Потом делаю поиск тегов span
let elem = document.querySelectorAll(tag);

Старые теги находит, а новые нет. Что за фигня?
Ответить с цитированием
  #2 (permalink)  
Старый 25.06.2025, 23:07
Интересующийся
Отправить личное сообщение для Trulala Посмотреть профиль Найти все сообщения от Trulala
 
Регистрация: 20.12.2015
Сообщений: 11

До нажатия
<div class="styled__SelectStyled-sc-15n6gx6-0 HHVbn uikit-select"><div class="styled__SelectInputBox-sc-15n6gx6-1 csquon uikit-select_box"><div class="styled__SelectInputValue-sc-15n6gx6-4 htsPlN"><span class="styled__SelectInputSearch-sc-15n6gx6-2 bOjFHH"><input autocomplete="off" readonly="" placeholder="Выберите шаблон" class="styled__SelectInput-sc-15n6gx6-5 onyxk" value=""></span><span title="" class="styled__SelectInputItem-sc-15n6gx6-3 RkdSN uikit-select-inputItem"></span></div><div class="styled__ControlIconStyled-sc-r7tvgm-0 icGPJJ uikit-flatList_control-icon"><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div><div tabindex="-1" role="list" class="styled__SelectList-sc-15n6gx6-6 fFVLly uikit-select_list"></div></div>

После нажатия
<div class="styled__SelectStyled-sc-15n6gx6-0 HHVbn uikit-select"><div class="styled__SelectInputBox-sc-15n6gx6-1 htxrpz uikit-select_box"><div class="styled__SelectInputValue-sc-15n6gx6-4 htsPlN"><span class="styled__SelectInputSearch-sc-15n6gx6-2 bOjFHH"><input autocomplete="off" readonly="" placeholder="Выберите шаблон" class="styled__SelectInput-sc-15n6gx6-5 onyxk" value=""></span><span title="" class="styled__SelectInputItem-sc-15n6gx6-3 RkdSN uikit-select-inputItem"></span></div><div class="styled__ControlIconStyled-sc-r7tvgm-0 icGPJJ uikit-flatList_control-icon"><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div><div tabindex="-1" role="list" class="styled__SelectList-sc-15n6gx6-6 creHhJ uikit-select_list"><div data-label="текст какой-то" data-value="230697" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 kOyKQH select-dropdown-option" role="option"><span>текст какой-то</span></div><div data-label="Завтра могу сделать." data-value="102846" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>Завтра могу сделать.</span></div><div data-label="текст какой-то" data-value="15439" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div><div data-label="текст какой-то" data-value="76256" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div><div data-label="текст какой-то" data-value="15296" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div><div data-label="текст какой-то" data-value="230702" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div><div data-label="текст какой-то" data-value="256641" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div><div data-label="текст какой-то" data-value="106421" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div></div></div>

function findElementByTagAndText(tag, text){
    console.log('tag = ' + tag);
    console.log('text = ' + text);
     let elem = document.querySelectorAll(tag); //собираем все элементы span в nodelist
    let pattern = new RegExp(text, "i");
   let elem2 = Array.from( elem ).filter( e => pattern.test(e.textContent) );
    console.log('list of span array = ' + elem2.length);
    return elem2[0];
}

Получаю
tag = span
text = текст какой-то
list of span array = 0
Ответить с цитированием
  #3 (permalink)  
Старый 26.06.2025, 00:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,149

Trulala,
<!DOCTYPE HTML>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
</head>

<body>
    <div class="styled__SelectStyled-sc-15n6gx6-0 HHVbn uikit-select">
        <div class="styled__SelectInputBox-sc-15n6gx6-1 htxrpz uikit-select_box">
            <div class="styled__SelectInputValue-sc-15n6gx6-4 htsPlN"><span class="styled__SelectInputSearch-sc-15n6gx6-2 bOjFHH"><input autocomplete="off" readonly="" placeholder="Выберите шаблон" class="styled__SelectInput-sc-15n6gx6-5 onyxk" value=""></span><span title="" class="styled__SelectInputItem-sc-15n6gx6-3 RkdSN uikit-select-inputItem"></span></div>
            <div class="styled__ControlIconStyled-sc-r7tvgm-0 icGPJJ uikit-flatList_control-icon"><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div>
        </div>
        <div tabindex="-1" role="list" class="styled__SelectList-sc-15n6gx6-6 creHhJ uikit-select_list">
            <div data-label="текст какой-то" data-value="230697" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 kOyKQH select-dropdown-option" role="option"><span>текст какой-то</span></div>
            <div data-label="Завтра могу сделать." data-value="102846" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>Завтра могу сделать.</span></div>
            <div data-label="текст какой-то" data-value="15439" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div>
            <div data-label="текст какой-то" data-value="76256" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div>
            <div data-label="текст какой-то" data-value="15296" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div>
            <div data-label="текст какой-то" data-value="230702" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div>
            <div data-label="текст какой-то" data-value="256641" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div>
            <div data-label="текст какой-то" data-value="106421" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option"><span>текст какой-то</span></div>
        </div>
    </div>
    <script>
        function findElementByTagAndText(tag, text) {
            console.log('tag = ' + tag);
            console.log('text = ' + text);
            let elem = document.querySelectorAll(tag); //собираем все элементы span в nodelist
            let pattern = new RegExp(text, "i");
            let elem2 = Array.from(elem).filter(e => pattern.test(e.textContent));
            console.log('list of span array = ' + elem2.length);
            return elem2[0];
        }
        let tag = 'span'
        let text = 'текст какой-то'
        findElementByTagAndText(tag, text);
        /* tag = span
         text = текст какой-то
         list of span array = 7*/
    </script>
</body>

</html>
Ответить с цитированием
  #4 (permalink)  
Старый 26.06.2025, 15:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,278

Сообщение от Trulala
Старые теги находит, а новые нет. Что за фигня?
Это ты делаешь что-то не то... Или не в то время.
В противном случае все будет находиться. Вот пример.

<button id='test'>Тест</button>
<button id='add'>Добавить элементы</button>
<div class="styled__SelectStyled-sc-15n6gx6-0 HHVbn uikit-select">
    <div class="styled__SelectInputBox-sc-15n6gx6-1 csquon uikit-select_box">
        <div class="styled__SelectInputValue-sc-15n6gx6-4 htsPlN">
            <span class="styled__SelectInputSearch-sc-15n6gx6-2 bOjFHH">
                <input autocomplete="off" readonly="" placeholder="Выберите шаблон" class="styled__SelectInput-sc-15n6gx6-5 onyxk" value="">
            </span>
            <span title="" class="styled__SelectInputItem-sc-15n6gx6-3 RkdSN uikit-select-inputItem"></span>
        </div>
        <div class="styled__ControlIconStyled-sc-r7tvgm-0 icGPJJ uikit-flatList_control-icon">
            <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg>
        </div>
    </div>
    <div tabindex="-1" role="list" class="styled__SelectList-sc-15n6gx6-6 fFVLly uikit-select_list"></div>
</div>
 
<script>
 
const html = `
    <div data-label="текст какой-то" data-value="230697" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 kOyKQH select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="Завтра могу сделать." data-value="102846" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>Завтра могу сделать.</span>
    </div>
    <div data-label="текст какой-то" data-value="15439" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="76256" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="15296" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="230702" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="256641" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="106421" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
`
const ot = document.querySelector('.styled__SelectList-sc-15n6gx6-6.fFVLly.uikit-select_list')
add.addEventListener('click', _ => {
    ot.innerHTML = html
})
test.addEventListener('click', _ => {
    const v = document.querySelectorAll('span').length
    alert(`Элементов ${v}шт.`)
})
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 26.06.2025, 20:38
Интересующийся
Отправить личное сообщение для Trulala Посмотреть профиль Найти все сообщения от Trulala
 
Регистрация: 20.12.2015
Сообщений: 11

Сообщение от ksa Посмотреть сообщение
Это ты делаешь что-то не то... Или не в то время.
В противном случае все будет находиться. Вот пример.

<button id='test'>Тест</button>
<button id='add'>Добавить элементы</button>
<div class="styled__SelectStyled-sc-15n6gx6-0 HHVbn uikit-select">
    <div class="styled__SelectInputBox-sc-15n6gx6-1 csquon uikit-select_box">
        <div class="styled__SelectInputValue-sc-15n6gx6-4 htsPlN">
            <span class="styled__SelectInputSearch-sc-15n6gx6-2 bOjFHH">
                <input autocomplete="off" readonly="" placeholder="Выберите шаблон" class="styled__SelectInput-sc-15n6gx6-5 onyxk" value="">
            </span>
            <span title="" class="styled__SelectInputItem-sc-15n6gx6-3 RkdSN uikit-select-inputItem"></span>
        </div>
        <div class="styled__ControlIconStyled-sc-r7tvgm-0 icGPJJ uikit-flatList_control-icon">
            <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg>
        </div>
    </div>
    <div tabindex="-1" role="list" class="styled__SelectList-sc-15n6gx6-6 fFVLly uikit-select_list"></div>
</div>
 
<script>
 
const html = `
    <div data-label="текст какой-то" data-value="230697" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 kOyKQH select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="Завтра могу сделать." data-value="102846" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>Завтра могу сделать.</span>
    </div>
    <div data-label="текст какой-то" data-value="15439" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="76256" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="15296" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="230702" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="256641" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
    <div data-label="текст какой-то" data-value="106421" data-disabled="false" class="styled__SelectListItem-sc-15n6gx6-7 gAohFE select-dropdown-option" role="option">
        <span>текст какой-то</span>
    </div>
`
const ot = document.querySelector('.styled__SelectList-sc-15n6gx6-6.fFVLly.uikit-select_list')
add.addEventListener('click', _ => {
    ot.innerHTML = html
})
test.addEventListener('click', _ => {
    const v = document.querySelectorAll('span').length
    alert(`Элементов ${v}шт.`)
})
</script>
Я не могу создать const html . Сайт не мой, работаю с ним через Tampermonkey. Мне нужно не только найти элемент, но и кликнуть по нему.
Ответить с цитированием
  #6 (permalink)  
Старый 26.06.2025, 21:03
Интересующийся
Отправить личное сообщение для Trulala Посмотреть профиль Найти все сообщения от Trulala
 
Регистрация: 20.12.2015
Сообщений: 11

Я наверное не очень хорошо объяснил. Сайт не мой, я много с ним работаю и чтобы облегчить работу использую расширение браузера tampermonkey. Расширение внедряет на страницу мой собственный скрипт. Работает скрипт так: на странице создается кнопка, по нажатию на которой раскрывается список шаблонов, требуется кликнуть на определенном элементе списка. Списка изначально на странице нет, выводится скриптом. Кнопка работает, список раскрывается. Но дальше ничего не работает, пункт не выбирается и не нажимается. Ещё недавно неделю назад всё работало, а теперь перестало работать. Я плохо разбираюсь в JavaScript, но я так понял, что скрипт не находит пункты списка, пишет undefined.
Код поиска элементов span на странице рабочий. Но он находит только элементы которые находились на странице при загрузке страницы, а вот элементы которые добавляются скриптом он не находит.
Ответить с цитированием
  #7 (permalink)  
Старый 04.07.2025, 23:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,598

Trulala, классическая асинхронщина. На момент исполнения твоего кода элементы списка ещё не были добавлены на страницу скриптом сайта:
0мсек: нажимаешь на кнопку
0мсек: код запускает открытие списка
0мсек: код пытается поучить значение из списка - не находит
1мсек: выводится список

Тебе надо дождаться их появления. Это можно сделать используя MutationObserver или банальный setTimeout.
__________________
29375, 35

Последний раз редактировалось Aetae, 04.07.2025 в 23:55.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повернуть элемент мышкой LADYX Элементы интерфейса 2 26.04.2021 21:33
Сделать родительский элемент меню активным, дочерний элемент которого был нажат Jimmi Элементы интерфейса 6 04.06.2020 12:06
Как добавить только один элемент? Артур Кудашев Events/DOM/Window 0 19.05.2019 11:38
Перемещение к новому элементу на странице sktemp jQuery 7 17.05.2012 17:56
Как узнать находится ли DOM элемент в области видимости? phgrey Общие вопросы Javascript 4 22.03.2011 19:05