document.querySelectorAll(более одного набора данных);
Я пытаюсь использовать:
document.querySelectorAll('[data-r=0 data-c=0]');
выбрать определенный элемент HTML, но он возвращает:
Uncaught DOMException: не удалось выполнить 'querySelectorAll' для 'Document': '[data-r=0 data-c=0]' не является допустимым селектором.
Я пытаюсь понять почему. Разве это не запрос по 2 наборам данных одновременно? Все примеры, которые я нашел в Интернете, показывают только примеры querySelectorAll только с одним набором данных в них. Я пытаюсь избежать использования JQuery, есть ли способ?
<table id="board">
<tr>
<td class="box" data-r=0 data-c=0></td>
<td class="box" data-r=0 data-c=1></td>
<td class="box" data-r=0 data-c=2></td>
</tr>
<tr>
<td class="box" data-r=1 data-c=0></td>
<td class="box" data-r=1 data-c=1></td>
<td class="box" data-r=1 data-c=2></td>
</tr>
<tr>
<td class="box" data-r=2 data-c=0></td>
<td class="box" data-r=2 data-c=1></td>
<td class="box" data-r=2 data-c=2></td>
</tr>
</table>
3 ответа
Прежде всего, вам нужно добавить кавычки, чтобы селектор мог быть действительным. Затем в зависимости от того, что вы действительно хотите выбрать, у вас есть два разных синтаксиса:
[data-r="0"][data-c="0"]
выберет элементы, которые имеютdata-r=0
А ТАКЖЕdata-c=0
[data-r="0"],[data-c="0"]
выберет элементы, которые имеютdata-r=0
ИЛИ ЖЕdata-c=0
Первое поведение довольно хорошо описано в стандартной документации. Второй просто список выбора. Конечно, вы можете объединить их. Например, вы можете выбрать диагональ таблицы, используя [data-r="0"][data-c="0"], [data-r="1"][data-c="1"], [data-r="2"][data-c="2"]
,
демонстрация
// Matches 1 element
console.log(document.querySelectorAll('[data-r="0"][data-c="0"]'));
// Matches 5 elements
console.log(document.querySelectorAll('[data-r="0"],[data-c="0"]'));
// Matches the 3 diagonal elements
console.log(document.querySelectorAll('[data-r="0"][data-c="0"], [data-r="1"][data-c="1"], [data-r="2"][data-c="2"]'));
<table id="board">
<tr>
<td class="box" data-r=0 data-c=0></td>
<td class="box" data-r=0 data-c=1></td>
<td class="box" data-r=0 data-c=2></td>
</tr>
<tr>
<td class="box" data-r=1 data-c=0></td>
<td class="box" data-r=1 data-c=1></td>
<td class="box" data-r=1 data-c=2></td>
</tr>
<tr>
<td class="box" data-r=2 data-c=0></td>
<td class="box" data-r=2 data-c=1></td>
<td class="box" data-r=2 data-c=2></td>
</tr>
</table>
Поместите ваши данные-r=0 в '' (цитаты)
<td class="box" data-r='0' data-c='0'></td>
и использовать
document.querySelectorAll("[data-r='0'][data-c='0']");
не забудьте поместить значение атрибута в '' в querySelector