Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.06.2023, 20:41
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

поиск элемента учитывая его содержание
как на чистом js, "одной строкой", найти tr-ы содержащие оба блока
<tr>
<th></th>
<td></td>
</tr>
Ответить с цитированием
  #2 (permalink)  
Старый 05.06.2023, 21:00
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,701

Что такое "блок"?
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2023, 21:07
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

в примере tr содержит два блока th и td

doc.querySelectorAll("tr").forEach((e,i)=>{
                    let th=e.querySelector("th");
                    let td=e.querySelector("td")
                    if (th && td){
                      console.log('наш вариант')
                    }
                  })


тоже самое, но без перебора можно сделать? еще в doc.querySelectorAll("tr .... ") отобрать сразу нужные, содержащие th и td

Последний раз редактировалось od0201, 05.06.2023 в 21:10.
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2023, 21:08
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

CSS не умеет искать по содержимому. Соответственно одной строкой - никак(если конечно не положить в эту в строку весь код ручного поиска). Ну ещё можно с помощью xpath, но не нужно.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2023, 21:18
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,701

Современные браузеры, которые поддерживают псевдокласс has (почти все, кроме FF) должны взять
doc.querySelectorAll("tr:has(th):has(td)")
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2023, 21:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

od0201,
let trs = [...document.querySelectorAll('tr > td ~ th, tr > th ~ td')].map(({parentNode}) => parentNode);
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2023, 21:26
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,701

рони,
В общем случае не сработает
В ситуации <td><th><td> или <th><td><th> мы найдем и th и td, как разные элементы. Родитель у них один, но он будет повторяться 2 раза в выходном массиве.

Последний раз редактировалось voraa, 05.06.2023 в 21:29.
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2023, 21:27
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

рони, тут ещё надо на уникальность почитить, на случай td ~ th ~ td.)

voraa, не поддерживается в FF - идёт нахрен. Не надо тут вторую эпоху IE разводить.)


P.S. Вроде красиво же?
document.evaluate("//tr[td and th]", document)
А подвох в том, что оно не массив возвращает и всё равно ручками по циклу пройтись придётся.)
__________________
29375, 35

Последний раз редактировалось Aetae, 05.06.2023 в 21:35.
Ответить с цитированием
  #9 (permalink)  
Старый 05.06.2023, 21:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068


[...new Set([...document.querySelectorAll('tr > td ~ th, tr > th ~ td')].map(({parentNode}) => parentNode))]
Ответить с цитированием
  #10 (permalink)  
Старый 07.06.2023, 13:48
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

спасибо, именно это мне и нужно было.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить реальную ширину элемента без его отрисовки archytector Элементы интерфейса 7 12.01.2011 09:26
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01
Массивы удаление элемента и вставка на его место другого mycoding Общие вопросы Javascript 1 19.04.2010 22:30
поиск элемента по критериям Wagner Events/DOM/Window 15 03.03.2010 15:14
Поиск элемента по куску его Id gregOlsener Events/DOM/Window 1 25.08.2008 22:04