在javascript dom中,是否有属性名称的规则?

在页面上使用像table:rowNum:<name>这样的属性名称的元数据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()


从Chrome控制台:

> 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

看起来你可以用双反斜线来逃避特殊字符:

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

我认为问题在于冒号通常表示一个伪元素。

根据WHATWG规范,除了那些会改变上下文的字符之外的任何字符(例如等于字符,因为它指定了值的开始,或者大于字符,它将指定标签的结尾)。 在此基础上,可以在属性名称中使用冒号字符。

更新 (基于对问题的回答和更新的评论)

为了在querySelectorgetAttribute使用一个变量,你可以做这样的事情,或者你可以只保存带有转义字符的版本,而没有(这绝对是我的首选):

var s = "emp:1:update";
console.log(row.getAttribute(s.replace(//g, "")));
链接地址: http://www.djcxy.com/p/54123.html

上一篇: in javascript dom, are there rules to attribute names?

下一篇: Using Vim is Primary Editor