通过 JavaScript 动态注入 HTML 为 CSS 转义的实体
Dynamically inject HTML entity escaped for CSS via JavaScript
我正在尝试动态创建一个 HTML 元素列表,其中 data-*
属性对应于不同的 HTML 实体,然后由 CSS 选取并像这样用作伪元素内容:
li:after {
content: attr(data-code);
}
问题在于 attr()
正确呈现实际实体,而不是 prefix said code with &#x
的文字代码 - 您的典型 \
不起作用。
所以期望的输出 HTML 是这样的:<li data-code="NTITY"></li>
。当直接添加到 HTML 时,这与我的 CSS 规则的预期完全一样。转义实体放置在页面上的 :after
伪元素中并呈现为实体图标。
这就是事情变得奇怪的地方...
如前所述,我正在尝试通过 JavaScript(遍历列表)动态地创建和注入这些 li
s ,这就是障碍发生的地方。
var entities = [{code: '😂'}, ...];
for (var i = 0; i < entitites.length; i++) {
var entity = entitites[i],
listItem = document.createElement('li');
listItem.setAttribute('data-code', entity.code);
list.appendChild(listItem);
}
li
已正确添加到 DOM 并设置了正确格式的实体,因此它被我的 CSS 规则选中。但是,显示的不是实体图标,而是代码!
请注意,在上图中,呈现的第一项是页面上明确显示的 HTML。第二项是通过 JS 注入的(使用完全相同的代码),然后由 CSS 给定一个 :after
元素。 Chrome 的网络检查器甚至以不同的方式呈现它!
更奇怪的是,我可以通过 WebInspector 编辑 HTML 并手动注入转义的 data-*
属性 - Chrome STILL 渲染正确的图标!
我在这里不知所措,所以任何指导将不胜感激!
HTML 实体符号只能由 HTML 解析器解析。如果你的 data-code
属性是 JavaScript 中的 "born",那么你需要使用 JavaScript 符号来获取你想要的 Unicode 字符.在 JavaScript 中,您使用 \u263A
(反斜杠、小写 "u" 和四个十六进制数字)代替 ☺
作为笑脸。
您的 data-code
属性是直接编码到您的 HTML 来源(使用 HTML 实体符号)还是在 JavaScript 中创建(使用 JavaScript表示法),当属性值是 DOM 的一部分时,它是 Unicode。
现在,当您有 16 位范围之外的字符时,事情会变得更加复杂,因为 JavaScript 处理这种情况有点糟糕。您可以在 http://www.fileformat.info/info/unicode/ 处查找代码点,这将为您提供所需的 "C/C++/Java" UTF-16 代码对。例如,你的 "tears of joy" 脸是 "\uD83D\uDE02"
.
对
我正在尝试动态创建一个 HTML 元素列表,其中 data-*
属性对应于不同的 HTML 实体,然后由 CSS 选取并像这样用作伪元素内容:
li:after {
content: attr(data-code);
}
问题在于 attr()
正确呈现实际实体,而不是 prefix said code with &#x
的文字代码 - 您的典型 \
不起作用。
所以期望的输出 HTML 是这样的:<li data-code="NTITY"></li>
。当直接添加到 HTML 时,这与我的 CSS 规则的预期完全一样。转义实体放置在页面上的 :after
伪元素中并呈现为实体图标。
这就是事情变得奇怪的地方...
如前所述,我正在尝试通过 JavaScript(遍历列表)动态地创建和注入这些 li
s ,这就是障碍发生的地方。
var entities = [{code: '😂'}, ...];
for (var i = 0; i < entitites.length; i++) {
var entity = entitites[i],
listItem = document.createElement('li');
listItem.setAttribute('data-code', entity.code);
list.appendChild(listItem);
}
li
已正确添加到 DOM 并设置了正确格式的实体,因此它被我的 CSS 规则选中。但是,显示的不是实体图标,而是代码!
请注意,在上图中,呈现的第一项是页面上明确显示的 HTML。第二项是通过 JS 注入的(使用完全相同的代码),然后由 CSS 给定一个 :after
元素。 Chrome 的网络检查器甚至以不同的方式呈现它!
更奇怪的是,我可以通过 WebInspector 编辑 HTML 并手动注入转义的 data-*
属性 - Chrome STILL 渲染正确的图标!
我在这里不知所措,所以任何指导将不胜感激!
HTML 实体符号只能由 HTML 解析器解析。如果你的 data-code
属性是 JavaScript 中的 "born",那么你需要使用 JavaScript 符号来获取你想要的 Unicode 字符.在 JavaScript 中,您使用 \u263A
(反斜杠、小写 "u" 和四个十六进制数字)代替 ☺
作为笑脸。
您的 data-code
属性是直接编码到您的 HTML 来源(使用 HTML 实体符号)还是在 JavaScript 中创建(使用 JavaScript表示法),当属性值是 DOM 的一部分时,它是 Unicode。
现在,当您有 16 位范围之外的字符时,事情会变得更加复杂,因为 JavaScript 处理这种情况有点糟糕。您可以在 http://www.fileformat.info/info/unicode/ 处查找代码点,这将为您提供所需的 "C/C++/Java" UTF-16 代码对。例如,你的 "tears of joy" 脸是 "\uD83D\uDE02"
.