svg 文本实体在 javascript 中设置时被转义
svg text entity is escaped when set in javascript
编辑:我已经有了转义的 XML 字符串。我知道 javascript 有不同的文字语法,我试图避免必须转换。
我想在 javascript 中动态设置 svg 文本元素的文本内容。但是当我在文本内容中使用 XML 实体时,该实体被转义了。
我意识到我可以将 XML 转义序列转换为文字字符,但我不明白为什么:
e.textContent="Copyright ©";
与 svg 的行为不同:
<text y="100">Copyright ©</text>
后者是版权符号,前者是文字代码
这是显示问题的 fiddle:
https://jsfiddle.net/AaronDavidNewman/4qs9ug53/10/
编辑:
根据 Michael Kay 在下面的回答,我在这里发布了解决方案:
https://jsfiddle.net/AaronDavidNewman/h6svzn98/3/
解析 XML 时实体需要存在...
var dp = new DOMParser();
var tn = dp.parseFromString(...string that contains code
Javascript 转义和 XML 转义的语法不同。对于 javascript,unicode 转义前缀是 \u
window.onload = function() {
var e = document.createElementNS("http://www.w3.org/2000/svg", "text");
e.textContent="Copyright \u00A9";
document.getElementById("moo-cow").appendChild(e);
}
<svg width="400" height="400" viewBox="0 0 400 200">
<g id="moo-cow" >
</g>
<g id="works-fine">
<text y="100">Copyright ©</text>
</g>
</svg>
XML的树形表示和XML的词法表示是完全不同的东西。 DOM 包含没有任何 XML 转义的字符串 - XML 解析器在解析时删除转义序列,序列化器在序列化时添加回转义序列。
©
不起作用的原因是这种表示法只能被 XML 解析器理解,而您没有使用 XML 解析器处理它。
编辑:我已经有了转义的 XML 字符串。我知道 javascript 有不同的文字语法,我试图避免必须转换。
我想在 javascript 中动态设置 svg 文本元素的文本内容。但是当我在文本内容中使用 XML 实体时,该实体被转义了。 我意识到我可以将 XML 转义序列转换为文字字符,但我不明白为什么:
e.textContent="Copyright ©";
与 svg 的行为不同:
<text y="100">Copyright ©</text>
后者是版权符号,前者是文字代码
这是显示问题的 fiddle:
https://jsfiddle.net/AaronDavidNewman/4qs9ug53/10/
编辑: 根据 Michael Kay 在下面的回答,我在这里发布了解决方案:
https://jsfiddle.net/AaronDavidNewman/h6svzn98/3/
解析 XML 时实体需要存在...
var dp = new DOMParser();
var tn = dp.parseFromString(...string that contains code
Javascript 转义和 XML 转义的语法不同。对于 javascript,unicode 转义前缀是 \u
window.onload = function() {
var e = document.createElementNS("http://www.w3.org/2000/svg", "text");
e.textContent="Copyright \u00A9";
document.getElementById("moo-cow").appendChild(e);
}
<svg width="400" height="400" viewBox="0 0 400 200">
<g id="moo-cow" >
</g>
<g id="works-fine">
<text y="100">Copyright ©</text>
</g>
</svg>
XML的树形表示和XML的词法表示是完全不同的东西。 DOM 包含没有任何 XML 转义的字符串 - XML 解析器在解析时删除转义序列,序列化器在序列化时添加回转义序列。
©
不起作用的原因是这种表示法只能被 XML 解析器理解,而您没有使用 XML 解析器处理它。