Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как на чистом JS изменить датасет (https://javascript.ru/forum/misc/84975-kak-na-chistom-js-izmenit-dataset.html)

Ops 21.02.2023 22:42

Как на чистом JS изменить датасет
 
Есть такая строка:
<option value="" data-settings="{"related":"17","math":"400"}">......</option>

Надо изменить значение атрибута data-settings "math" c "400" на "0". Уже всю голову сломал.
Нужно именно на js, не квери, решение с регуляркой и тп не подходит.
Спасибо!

voraa 21.02.2023 22:46

"{"related":"17","math":"400"}"
Что это такое? Значением атрибута должно быть строка.
У вас значение будет только первая скобка "{"

рони 21.02.2023 22:50

Ops,
let data = JSON.parse(option.dataset.settings);
  data.math = 0;
  option.dataset.settings = JSON.stringify(data);

voraa 21.02.2023 23:25

рони,
<select>
<option value="" data-settings="{"related":"17","math":"400"}">......</option>
</select>
<script>
const option = document.querySelector('option');
alert(option.dataset.settings)
</script>

Какой там JSON может быть.

Ops 21.02.2023 23:28

voraa пишу поверх чужого кода, который я не могу трогать, но он передаёт параметр в датасете, за это и зацепился

рони, похоже на правду, Вы всегда точно подсказываете.

Еще вопрос, что бы тему не заводить. Как добраться js до option value в селекте. Пока до самого select добрался через класс, а как в нём в 0 - option поменять датасет
document.getElementsByClassName("summselect");

рони 21.02.2023 23:38

Цитата:

Сообщение от voraa
Какой там JSON может быть.

кавычки неправильные из-за копирования у автора.

рони 21.02.2023 23:41

Ops,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    </style>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            let option = document.querySelector(".summselect option");// для нулевого можно так или так
            //let option = document.querySelector(".summselect option:nth-child(1)"); менять номер 1 для нужного, отсчёт с 1
           // let option = document.querySelector(".summselect").options[0];  отсчёт с нуля

 let data = JSON.parse(option.dataset.settings);
            data.math = 0;
            option.dataset.settings = JSON.stringify(data);
            alert(option.dataset.settings);
        })
    </script>
</head>

<body>
<select name="" class="summselect">
<option value="" data-settings='{"related":"17","math":"400"}'>......</option>
</select>
</body>

</html>


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