我为此做了一个小函数。对于jQuery的追加方法,问题是需要为SVG指定命名空间,即“http://www.w3.org/2000/svg”更多
如果我准备它为appendmethod呢?在这种情况下,你只需要提供一些参数:
tagName:它可以是每一个SVG元素,如矩形,圆,文本,g等。
text:如果您正在使用类似text tagname的东西,则需要指定text
和SVG元素的其他已知属性。
因此,我要做的是定义一个名为createSvgElem()的函数,它在内部使用document.createElementNS()。
这里有一个例子:
$("svg").append(
createSvgElem({tagName: "text", x: 10, y: 10, text: "ABC", style: "fill: red"})
)
这是函数:
function createSvgElem(options){
var settings = $.extend({
}, options);
if(!$.isEmptyObject(settings.tagName)){
var el = document.createElementNS('http://www.w3.org/2000/svg', settings.tagName);
for (var k in settings)
if(k != "tagName" && k != "text" && settings[k] != "")//If attribute has value
el.setAttribute(k, settings[k]);
if ("text" in settings)
el.textContent = settings.text; //el.innerText; For IE
return el;
}
}
你可以自己试试:
//Definition:
function createSvgElem(options){
var settings = $.extend({
}, options);
if(!$.isEmptyObject(settings.tagName)){
var el = document.createElementNS('http://www.w3.org/2000/svg', settings.tagName);
for (var k in settings)
if(k != "tagName" && k != "text" && settings[k] != "")//If attribute has value
el.setAttribute(k, settings[k]);
if ("text" in settings)
el.textContent = settings.text; //el.innerText; For IE
return el;
}
}
//Usage:
$(function(){
$("#svg-elem").append(
createSvgElem({tagName: "rect", width: 130, height: 500, style: "fill: #000000a3;"})
)
$("#svg-elem").append(
createSvgElem({tagName: "text", x: 30, y: 30, text: "ABCD", style: "fill: red"})
)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<svg id="svg-elem" width="200" height="200">
</svg>