Die gewählte Lösung ist in Ordnung, wenn Sie möchten, dass jQuery alle svg-Elemente in Ihrem DOM verarbeitet und Ihr DOM eine angemessene Größe hat. Wenn Ihr DOM jedoch sehr groß ist und Sie beschließen, Teile Ihres DOM dynamisch zu laden, macht es wirklich keinen Sinn, das gesamte DOM neu zu scannen, nur um svg-Elemente zu aktualisieren. Verwenden Sie stattdessen ein jQuery-Plugin, um dies zu tun:
/**
* A jQuery plugin that loads an svg file and replaces the jQuery object with its contents.
*
* The path to the svg file is specified in the src attribute (which normally does not exist for an svg element).
*
* The width, height and class attributes in the loaded svg will be replaced by those that exist in the jQuery object's
* underlying html. Note: All other attributes in the original element are lost including the style attribute. Place
* any styles in a style class instead.
*/
(function ($) {
$.fn.svgLoader = function () {
var src = $(this).attr("src");
var width = this.attr("width");
var height = this.attr("height");
var cls = this.attr("class");
var ctx = $(this);
// Get the svg file and replace the <svg> element.
$.ajax({
url: src,
cache: false
}).done(function (html) {
let svg = $(html);
svg.attr("width", width);
svg.attr("height", height);
svg.attr("class", cls);
var newHtml = $('<a></a>').append(svg.clone()).html();
ctx.replaceWith(newHtml);
});
return this;
};
}(jQuery));
Geben Sie in Ihrer HTML-Datei ein svg-Element wie folgt an:
<svg src="images/someSvgFile.svg" height="45" width="45" class="mySVGClass"/>
Und wenden Sie das Plugin an:
$(".mySVGClass").svgLoader();