我只是想顺便说一下,我找到了一个更优雅的解决方案,它允许您继续使用带有 SVG 元素的 jQuery,但没有 jQuery SVG 库(不再更新,并且在 jQuery 1.8 或更高版本中存在一些问题)。只需使用这样的函数:
createSVGElement= function(element) {
return $(document.createElementNS('http://www.w3.org/2000/svg', element));
}
它在 SVG 命名空间上创建一个 SVG 元素并用 jQuery 封装它,一旦在正确的命名空间中创建了元素,您就可以在 jQuery 中自由使用它:
然后,您可以通过以下方式使用该功能:
var $myGradient= createSVGElement('linearGradient')
.attr( {
id:"MyGradient"
});
//if you dont need `defs`, skip this next line
var $myDefs = createSVGElement('defs');
createSVGElement('stop')
.attr({
offset: "5%",
"stop-color": "#F60"
})
.appendTo($myGradient);
createSVGElement('stop')
.attr({
offset:"95%",
"stop-color":"#FF6"
})
.appendTo($myGradient);
//Use this if you already have `defs`
$('svg defs').prepend($myGradient);
//Use this if you dont have `defs`
$('svg').prepend($myDefs);
$('svg defs').prepend($myGradient);
它不像您希望的那样紧凑,因为您必须手动创建每个元素,但它比使用 DOM 方法操作所有内容要好得多。
一个小提示,jQuery .attr() 函数假定所有属性都是小写的,这不是 SVG 元素的情况(例如标签中的viewBox
属性)。<svg>
为了解决这个问题,当使用大写字母设置属性时,请使用以下内容:
$("svg")[0].setAttribute("viewBox", "0 0 1000 1000");