Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Точный поиск элемента по классу (https://javascript.ru/forum/misc/70059-tochnyjj-poisk-ehlementa-po-klassu.html)

surru 07.08.2017 18:20

Точный поиск элемента по классу
 
День добрый. Собственно суть. Есть, допустим, много дивов вот с такими именами классов:
<div class="event-container closed-task cancelled-task    ">
<div class="event-container closed-task cancelled-task CANCELLED    ">

Использую:
getElementsByClassName('event-container closed-task cancelled-task')
Мне возвращается nodelist с дивами имеющими оба описанных выше именами классов. Собственно вопрос - как в getElementsByClassName сделать поиск по точному совпадению имени класса?

laimas 07.08.2017 18:24

'event-container.closed-task.cancelled-task'

ksa 08.08.2017 08:33

Цитата:

Сообщение от laimas (Сообщение 460892)
'event-container.closed-task.cancelled-task'

Это не сработает... :no:

<div class="event-container closed-task cancelled-task CANCELLED"></div>
<script type='text/javascript'>
var o=document.getElementsByClassName('event-container.closed-task.cancelled-task');
alert(o.length);
</script>

ksa 08.08.2017 08:41

Цитата:

Сообщение от surru
как в getElementsByClassName сделать поиск по точному совпадению имени класса?

Почему именно getElementsByClassName?

Можно например так...
<div class="event-container closed-task cancelled-task"></div>
<div class="event-container closed-task cancelled-task CANCELLED"></div>
<script type='text/javascript'>
var o=document.querySelectorAll('.event-container.closed-task.cancelled-task:not(.CANCELLED)');
alert(o.length);
</script>

laimas 08.08.2017 08:44

Цитата:

Сообщение от ksa
Это не сработает.

Сработает:

document.querySelector('.event-container.closed-task.cancelled-task')

ksa 08.08.2017 08:48

Цитата:

Сообщение от laimas
Сработает

И это не сработает... :no:
1. Автору нужно работать с getElementsByClassName
2. Твой вариант просто выберет первое совпадение. Если использовать querySelectorAll с твоим селектором - так же выберется 2 элемента

<div class="event-container closed-task cancelled-task"></div>
<div class="event-container closed-task cancelled-task CANCELLED"></div>
<script type='text/javascript'>
var o=document.querySelectorAll('.event-container.closed-task.cancelled-task');
alert(o.length);
</script>

laimas 08.08.2017 08:52

Цитата:

Сообщение от ksa
Твой вариант просто выберет первое совпадение.

Ну это уже не мои проблемы, заказан поиск по составному классу, пусть применяет метод подобающий, а то что querySelectorAll выберет несколько, то так и должно. Если нужно выбрать N-ый из этого набора, значит пусть указывает дополнительный селектор, какие проблемы?

ksa 08.08.2017 08:53

Цитата:

Сообщение от laimas
Ну это уже не мои проблемы

Потопил... :haha:

ksa 08.08.2017 08:55

Цитата:

Сообщение от laimas
Если нужно выбрать N-ый из этого набора, значит пусть указывает дополнительный селектор, какие проблемы?

Автору нужны элементы только (!) с таким набором. Элементы с такими классами + еще какие-то ему не нужны.
Т.о. твой селектор ему не поможет. :no:

laimas 08.08.2017 09:23

Цитата:

Сообщение от ksa
Автору нужны элементы только (!) с таким набором.

Я не знаю какие у него наборы, но если указанного составного класса и исключая .... кто мешает добавить :not(....)?


Часовой пояс GMT +3, время: 20:51.