Ответ 1
Он недоступен через outerHTML, потому что SVG не является HTML - это отдельная спецификация XML.
Вот почему, например, ваш svg node в этом примере имеет собственное пространство имен (xmlns="http://www.w3.org/2000/svg
).
Ваш пример может быть наиболее целесообразным для одноразового запроса, но на самом деле его можно копать в использовании собственных атрибутов. Это займет немного больше работы.
Пусть используется связанный образец node:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<text x="0" y="15" fill="black">An SVG element.</text>
</svg>
Если вы хотите извлечь пространство имен и версию, используйте свойство attributes
.
var svgElement = $('svg')[0]; // using your example
console.log(svgElement.attributes.xmlns); // outputs "http://www.w3.org/2000/svg"
console.log(svgElement.attributes.version); // outputs "1.1"
Если вы хотите извлечь фактическое содержимое, выполните итерацию по дочерним элементам. Как и в предыдущем случае, нетекстовая коллекция node attributes
будет содержать значения x/y (и т.д.).
Без использования jQuery, снова используя ваш пример:
for (var i = 0; i < svgElement.childNodes.length; i++) {
var child = svgElement.childNodes[i];
if (child.nodeType == 1) {
console.log(child.attributes[0].name); // "x"
console.log(child.attributes[0].value); // "0"
console.log(child.attributes[1].name); // "y"
console.log(child.attributes[1].value); // "15"
}
}
Здесь обновленный Fiddle, немного более изящно демонстрирующий возможности: http://jsfiddle.net/33g8g/8/