用于使用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
答案 0 :(得分:4)
您似乎可以使用双反斜杠转义特殊字符:
var el2 = element.querySelector("[emp\\:1\\:update]");
我认为这个问题与冒号通常表示伪元素的事实有关。
根据WHATWG spec,除了那些会改变上下文的字符之外的任何字符(例如,等于字符,指定值的开头,或大于字符,这将指定结束标签)。在此基础上,可以在属性名称中使用冒号字符。
更新(根据对问题的回答和更新的评论)
要同时使用querySelector
和getAttribute
两个变量,您可以执行此类操作,或者您可以只使用转义字符存储版本,而不存储一个(这肯定是我的首选选项) ):
var s = "emp\\:1\\:update";
console.log(row.getAttribute(s.replace(/\\/g, "")));