В javascript DOM, есть ли правила для имен атрибутов? - PullRequest
7 голосов
/ 03 августа 2011

для метаданных на странице с использованием имен атрибутов, таких как table:rowNum:<name>, например,

var row = document.createElement('tr');
row.setAttribute('tup','emp:1');
row.setAttribute('emp:1:pkid','123');

использовали имена, разделенные двоеточиями (например, name='emp:1:emp_id'), в течение многих лет с хорошим успехом, но сегодня получили немного с именами атрибутов, разделенных двоеточиями

в частности:

var el2 = row.parentNode.querySelector("[emp:1:pkid]");
=> `Error: SYNTAX_ERR: DOM Exception 12`

специальные символы, такие как ':', недопустимы в именах атрибутов dom? можно ли использовать специальные символы для работы с querySelector()?

<ч /> с хромированной консоли:

> row.parentNode.querySelector('[emp:1:pkid]');
Error: SYNTAX_ERR: DOM Exception 12

согласно Джеймсу (ниже):

> row.parentNode.querySelector('[emp\\:1\\:pkid]');
123

но проблема - не работает с getAttribute - pia

> row.getAttribute('emp:1:pkid');
123
> row.getAttribute('emp\\:1\\:pkid');
null

1 Ответ

4 голосов
/ 03 августа 2011

Кажется, что вы можете избежать специальных символов с двойной обратной косой чертой:

var el2 = element.querySelector("[emp\\:1\\:update]");

Я думаю, что проблема заключается в том, что двоеточие обычно указывает на псевдоэлемент.

В соответствии со спецификацией WHATWG любые символы, кроме тех, которые могут изменить контекст (например, символ равенства, как тот, который указывает начало значения, или символ больше чем, который будет указывать конецтега).Исходя из этого, можно использовать символы двоеточия в именах атрибутов.

Обновление (на основе комментариев к ответу и обновлений на вопрос)

Чтобы использовать одну переменную с обоимиquerySelector и getAttribute, вы можете сделать что-то вроде этого, или вы можете просто сохранить версию с экранированными символами, а другую без (что определенно будет моим предпочтительным вариантом):

var s = "emp\\:1\\:update";
console.log(row.getAttribute(s.replace(/\\/g, "")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...