在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规范,除了那些会改变上下文的字符之外的任何字符(例如等于字符,因为它指定了值的开始,或者大于字符,它将指定标签的结尾)。 在此基础上,可以在属性名称中使用冒号字符。
更新 (基于对问题的回答和更新的评论)
为了在querySelector
和getAttribute
使用一个变量,你可以做这样的事情,或者你可以只保存带有转义字符的版本,而没有(这绝对是我的首选):
var s = "emp:1:update";
console.log(row.getAttribute(s.replace(//g, "")));
链接地址: http://www.djcxy.com/p/54123.html