самозакрывания природа определяется в пространстве имен, так что это будет в значительной степени зависеть от того, как вы читаете вывод кода. С точки зрения Dom нет никакого атрибута — на узле —, который указывает «автозакрытие». Поэтому, если вы думаете об этом, это может быть применено только при рендеринге Dom до вывода строки и должно решаться рендерером.
Если вы используете инспектора вашего современного браузера для просмотра элемента SVG (с правильным пространством имен), вы увидите, что элементы круга отображаются как автоматически закрытые. Тем не менее, с той же настройкой (но с неправильным пространством имен) — не только ваш SVG не отображается —, вы увидите, что инспектор рассматривает его как HTML. В HTML нет спецификации для circle
, поэтому она будет просто отбрасываться по умолчанию. Который должным образом закрыт.
правильно Пространство имен
var body = jQuery('body'),
svg = jQuery(document.createElementNS('http://www.w3.org/2000/svg', 'svg')),
cir = jQuery(document.createElementNS('http://www.w3.org/2000/svg', 'circle'));
cir.attr({cx: 30, cy: 30, r: 20, style: 'fill: red;'});
svg.attr({
viewBox: "0 0 120 120",
version: "1.1",
xmlns: "http://www.w3.org/2000/svg"
});
svg.appendTo(body);
svg.append(cir);
некорректное Пространство имен
var body = jQuery('body'),
svg = jQuery('<svg>'),
cir = jQuery('<circle>');
cir.attr({cx: 30, cy: 30, r: 20, style: 'fill: red;'});
svg.attr({
viewBox: "0 0 120 120",
version: "1.1"
});
svg.appendTo(body);
svg.append(cir);
Независимо от того, как вы создали свой Dom однако, я могу поспорить, вы используете какую-либо функцию или атрибут, который упоминает «HTML «чтобы посмотреть источник вашего строительства. Я обнаружил, что независимо от того, насколько хорошо я строю свой SVG (с правильными пространствами имен), если я использую .innerHTML
(или .html()
jQuery, который в основном такой же) результат будет с соответствующими закрывающими тегами. Это потому, что вы просите браузер отобразить его как HTML, так что вы получите ту же проблему.
Я подтвердил вышеуказанное, даже используя D3 для настройки структуры.
console.log(svg.get(0).innerHTML); // <circle></circle>
Что вам нужно .innerSVG
или что-то подобное.
Общий вопрос должен быть, однако, — что вы на самом деле пытаетесь сделать. Если нужно построить что-то, что правильно экспортирует источник SVG, тогда это может быть желательно —, но я не могу придумать другую причину. Закрытое или автоматическое закрытие не влияет на поведение самой разметки.
Так же, как '$ ('SVG') добавить (' ');'? Как самозакрывающиеся, так и не действительные html. –
вы можете просто создать объект jquery 'var $ circle = $ (" ");' и '$ ('svg'). Append ($ circle)' –
@MariusDarila Также закрытие круга закрывающим тегом, а не ' ' –
Caspert