Текстовая сущность svg экранируется при установке в javascript - PullRequest
0 голосов
/ 29 марта 2020

Редактировать: у меня уже есть экранированная строка XML. Я знаю, что javascript имеет другой буквальный синтаксис, и я пытаюсь избежать преобразования.

Я хочу динамически установить текстовое содержимое текстового элемента svg в javascript. Но когда я использую сущность XML в текстовом содержимом, сущность экранируется. Я понимаю, что могу преобразовать escape-последовательность XML в буквальный символ, но я не понимаю, почему:

 e.textContent="Copyright ©";

ведет себя не так, как svg:

 <text y="100">Copyright &#x00a9;</text>

В последнем отображается символ авторского права, в первом я вижу буквальный код.

Вот скрипка, которая отображает проблему:

https://jsfiddle.net/AaronDavidNewman/4qs9ug53/10/

Редактировать: Основываясь на ответе Майкла Кея ниже, я разместил решение здесь:

https://jsfiddle.net/AaronDavidNewman/h6svzn98/3/

Сущность должна присутствовать, когда XML разобрал ...

var dp = new DOMParser();
var tn = dp.parseFromString(...string that contains code

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

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 &#x00a9;</text>
  </g>
</svg>
1 голос
/ 30 марта 2020

Представление дерева XML и лексическое представление XML - это совершенно разные вещи. DOM содержит строки без экранирования XML - парсер XML удаляет escape-последовательности при синтаксическом анализе, а сериализатор добавляет escape-последовательности обратно при сериализации.

Причина, по которой &#x00a9; не работает, заключается в том, что эта нотация понимается только парсером XML, и вы не обрабатываете ее парсером XML.

...