サイズ変更可能にするためにjavascriptでsvgタグを変更しようとしていますが、変更しても効果はありません。私はこれを行う必要がある理由は、このタグは私が変更することができないライブラリによってレンダリングされているので、私の唯一の選択は、javascriptでsvgを変更することだと思われる。javascriptでsvg属性を変更しても効果がありません
私は新しいHTML文書にタグをコピーできるので、このスクリプトが生成するタグが正しいことを知っています。(それはサンプルコードに含まれています) svgが変更されたことを認識させる(またはsvgを変更する別の方法)ようにします。
ここに私の問題を示してHTMLページです:
<html>
<head>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var svg = $('#testsvg').find('svg')[0];
var w = svg.getAttribute('width').replace('px', '');
var h = svg.getAttribute('height').replace('px', '');
svg.removeAttribute('width');
svg.removeAttribute('height');
svg.setAttribute('viewbox', '0 0 ' + w + ' ' + h);
svg.setAttribute('preserveaspectratio', 'xminymin meet')
$(svg)
.css('width', '100%')
.css('height', '100%')
.css('background-color', 'white');
});
</script>
</head>
<body style="background-color: #333;">
<div style="width: 80%; height: 40%;">
<svg id="resultsvg" xmlns="http://www.w3.org/2000/svg" version="1.1" style="width: 100%; height: 100%; background-color: white; " viewbox="0 0 100 100" preserveaspectratio="xminymin meet">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red"></circle>
</svg>
</div>
<div id="testsvg" style="width: 80%; height: 40%;">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100px" height="100px">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
</div>
</body>
</html>
仲間のgooglerの場合:jQuery要素からDOM要素を取得するには 'find( 'svg')の後に' [0] 'を書きます。これは 'setAttribute()'の使用を有効にするために重要です。 SVG DOMがHTML DOMと異なるため、jQuery 'attr()'メソッドを使用できません(cf. http://keith-wood.name/svg.html#dom参照) – Offirmo
これは、使用していない場合にのみ当てはまりますJQuery SVG(おそらく)。 リンク先に記載されています。 SVG DOMは、jQueryが設計されたHTML DOMとは異なります。したがって、クラスで動作するjQueryの関数は、SVGノードでは機能しません。 この問題を解決するには、jQuery SVG DOM拡張を使用します。ページの頭の部分に拡張子を追加します。 SVGの問題でこれを使用できない理由はわかりませんが、JquerySVGには埋め込まれている可能性がありますが、少し編集すればよいことは分かっています:) – XaolingBao