jQuery на самом деле не создан, чтобы знать о пространствах имен XML, поэтому строка "<g id='compass'></g>"
, вероятно, анализируется так, что сгенерированные узлы DOM находятся в пространстве имен по умолчанию, а не в пространстве имен SVG. Вы можете решить эту проблему, используя обычный DOM для создания узлов. Это будет выглядеть следующим образом:
svgns = "http://www.w3.org/2000/svg"
$("#svg").load(svgUrl + " svg", function() {
var g = document.createElementNS(svgns,"g");
g.setAttributeNS(null,'id','compass');
$("svg").append(g);
//do stuff
});
Если вам нужно создать более сложные структуры, я бы порекомендовал взглянуть на библиотеку jquery-svg , которая имеет более чистый API для генерации SVG DOM.
Обновлено
Я неправильно понял, что вы пытаетесь загрузить документ SVG и добавить его в свой HTML-документ хоста - вместо этого я подумал, что вы пытаетесь сгенерировать SVG с использованием скрипта. Чтобы решить вашу проблему, я бы рекомендовал сделать следующее (не проверено, но должно работать):
//get the SVG document using XMLHTTPRequest
$.get(svgUrl + " svg",
function(svgDoc){
//import contents of the svg document into this document
var importedSVGRootElement = document.importNode(svgDoc.documentElement,true);
//append the imported SVG root element to the appropriate HTML element
$("#svg").append(importedSVGRootElement);
},
"xml");