ちょっと立ち寄って、jQuery SVG ライブラリ (更新されなくなり、jQuery 1.8 以降でいくつかの問題があります) なしで、SVG 要素で jQuery を使い続けることができる、より洗練されたソリューションを見つけたと言いたいだけです。次のような関数を使用するだけです。
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");