Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Получение элемента по атрибуту data-* (https://javascript.ru/forum/dom-window/78292-poluchenie-ehlementa-po-atributu-data-%2A.html)

kosmonavtom 22.08.2019 13:45

Получение элемента по атрибуту data-*
 
Здравствуйте.
Нашел и собрал вот такой код с ошибками (ошибки data-reactid, elem = document.querySelector(#data-reactid); ):
<script>
function chpok(data-reactid){
    elem = document.querySelector(#data-reactid); //находим блок div который нужно как-то передать в функцию по data-reactid
    state = elem.style.display; //смотрим, включен ли сейчас элемент
    if (state =='') elem.style.display='none'; //если включен, то выключаем
    else elem.style.display=''; //иначе - включаем
}
</script>

Он должен работать (т.е. отображать блоки div или скрывать при нажатии на кнопки) для тегов HTML вида:
<button onclick="chpok('.1.$0')">
Вопрос 1
</button>
<div data-reactid='.1.$0' style="display:none">
Это выводится первый вопрос?
</div>
<button onclick="chpok('.1.$1')">
Вопрос 2
</button>
<div data-reactid='.1.$1' style="display:none">
Тут выводится второй вопрос.
</div>

Если везде заменить "data-reactid" на "id", и ошибочную строку на строку elem = document.getElementById(id); то все работает, но проблема в том, что в тегах на сайте нет и не будет аттрибута id. Подскажите пожалуйста можно ли получить элемент по атрибуту тега вида "data-reactid" - они уникальны для каждого объекта на странице. И что тогда нужно сделать? Заранее спасибо за любой ответ.

ksa 22.08.2019 13:50

Цитата:

Сообщение от kosmonavtom
можно ли получить элемент по тегу вида "data-reactid"

Да. :yes:
Цитата:

Сообщение от kosmonavtom
И что тогда нужно сделать?

Начать таки читать про css селекторы...
http://htmlbook.ru/samcss/selektory-atributov

kosmonavtom 22.08.2019 14:13

Цитата:

Сообщение от ksa (Сообщение 511996)
Да. :yes:

Спасибо обнадежили :)
Цитата:

Начать таки читать про css селекторы...
http://htmlbook.ru/samcss/selektory-atributov
Спасибо. Интересная статья.
Я наверно не правильно сформулировал вопрос. Но у меня нет доступа ни к HTML ни к CSS на сайте я могу лишь скрипт добавить ну естественно могу добавить и HTML и CSS, но ведь такое добавление это не совсем правильно наверно?! И еще в указанной статье я не нашел взаимодействия CSS со <script>.

ksa 22.08.2019 14:17

kosmonavtom, какие методы по работе с ДОМ-моделью ты знаешь?
Т.е. те методы, которыми можно получить ссылки на ДОМ-элементы?

kosmonavtom 22.08.2019 14:36

Цитата:

Сообщение от ksa (Сообщение 511998)
те методы, которыми можно получить ссылки на ДОМ-элементы?

Из нескольких источников:
- по значению атрибута id;
- по значению атрибута name;
- по имени тега;
- по имени класса или классов CSS;
- по совпадению с определенным селектором CSS.

Но я так и писал в сообщении, что у меня нет значения атрибута id. И теперь могу еще добавить, что нет значения и атрибута name. Но я так и не понял - это значит не получится ничего? Или data-reactid считается селектором CSS?

ksa 22.08.2019 15:01

Цитата:

Сообщение от kosmonavtom
по совпадению с определенным селектором CSS

А как пользоваться селектором атрибута я тебе показал... ;)
Цитата:

Сообщение от kosmonavtom
Но я так и не понял - это значит не получится ничего?

Ты ошибаешься... :no:
Цитата:

Сообщение от kosmonavtom
Или data-reactid считается селектором CSS?

Любой атрибут можно использовать в селекторах атрибутов. :yes:

kosmonavtom 22.08.2019 18:55

<script>
function chpok(sr){
    elem = document.querySelector("div[data-reactid=sr]"); //находим блок div и значение атрибута data-reactid
    state = elem.style.display; //смотрим, включен ли сейчас элемент
    if (state =='') elem.style.display='none'; //если включен, то выключаем
    else elem.style.display=''; //иначе - включаем
}
</script>

Не могу понять почему вот это не работает, вроде все как в источниках. Перепробовал различные вариации записи querySelector, но ничего не срабатывает. Подскажите пожалуйста, что не так?

рони 22.08.2019 19:24

kosmonavtom,
<!DOCTYPE html>

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

  <script>

function chpok(sr){
    var elem = document.querySelector("div[data-reactid='"+sr+"']"), //находим блок div и значение атрибута data-reactid
    style = elem.style;
    style.display = style.display !== "none" ? "none" : "" ;
     //если включен, то выключаем
   //иначе - включаем
}
</script>

</head>

<body>
 <button onclick="chpok('.1.$0')">
Вопрос 1
</button>
<div data-reactid='.1.$0' style="display:none">
Это выводится первый вопрос?
</div>
<button onclick="chpok('.1.$1')">
Вопрос 2
</button>
<div data-reactid='.1.$1' style="display:none">
Тут выводится второй вопрос.
</div>

</body>
</html>

kosmonavtom 22.08.2019 19:40

Спасибо :)
Итого:
1) var - я не написал
2) +sr+ - плюсы я не поставил
3) короткое написание функции :write:


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