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

前端之家收集整理的这篇文章主要介绍了在javascript dom中,有属性名称的规则吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于页面上的元数据,使用属性名称,例如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 spec,除了那些将改变上下文的字符之外的任何字符(例如,指定值的开头的等号字符,或指定标记结尾的大于字符).在此基础上,可以在属性名称中使用冒号字符.

更新(根据对问题的答案和更新的评论)

要将一个变量与querySelector和getAttribute一起使用,您可以执行类似这样的操作,或者您可以只存储带有转义字符的版本,而不存储一个(这肯定是我的首选选项):

var s = "emp\\:1\\:update";
console.log(row.getAttribute(s.replace(/\\/g,"")));
原文链接:https://www.f2er.com/js/157573.html

猜你在找的JavaScript相关文章