-
-
Save cod3cow/61beeca2cce94a70c9df to your computer and use it in GitHub Desktop.
/* | |
* Replace all SVG images with inline SVG | |
*/ | |
jQuery('img.svg').each(function(){ | |
var $img = jQuery(this); | |
var imgID = $img.attr('id'); | |
var imgClass = $img.attr('class'); | |
var imgURL = $img.attr('src'); | |
jQuery.get(imgURL, function(data) { | |
// Get the SVG tag, ignore the rest | |
var $svg = jQuery(data).find('svg'); | |
// Add replaced image's ID to the new SVG | |
if(typeof imgID !== 'undefined') { | |
$svg = $svg.attr('id', imgID); | |
} | |
// Add replaced image's classes to the new SVG | |
if(typeof imgClass !== 'undefined') { | |
$svg = $svg.attr('class', imgClass+' replaced-svg'); | |
} | |
// Remove any invalid XML tags as per http://validator.w3.org | |
$svg = $svg.removeAttr('xmlns:a'); | |
// Replace image with new SVG | |
$img.replaceWith($svg); | |
}, 'xml'); | |
}); |
this code doesn't work on internet explorer any solution for this issue??
Great code btw, really useful.
If you need it in ES6:$('img.svg').each((i, e) => { const $img = $(e); const imgID = $img.attr('id'); const imgClass = $img.attr('class'); const imgURL = $img.attr('src'); $.get(imgURL, (data) => { // Get the SVG tag, ignore the rest let $svg = $(data).find('svg'); // Add replaced image's ID to the new SVG if (typeof imgID !== 'undefined') { $svg = $svg.attr('id', imgID); } // Add replaced image's classes to the new SVG if (typeof imgClass !== 'undefined') { $svg = $svg.attr('class', `${imgClass}replaced-svg`); } // Remove any invalid XML tags as per http://validator.w3.org $svg = $svg.removeAttr('xmlns:a'); // Check if the viewport is set, if the viewport is not set the SVG wont't scale. if (!$svg.attr('viewBox') && $svg.attr('height') && $svg.attr('width')) { $svg.attr(`viewBox 0 0 ${$svg.attr('height')} ${$svg.attr('width')}`); } // Replace image with new SVG $img.replaceWith($svg); }, 'xml'); });
Thank you @VinceVachon, I found a small error here:
$svg = $svg.attr("class",
${imgClass}replaced-svg);
I added a space between the original classes and "replaced-img" new class:
$svg = $svg.attr("class",
${imgClass} replaced-svg);
While the plain JS version provided by @usame-algan gives me an error: "fetch(...) is undefined" and is not working for me...
Anyway thank everybody for contributing on this useful tool!
This is a great solution. Is there any way to use this with owl carousel? When new carousel items loading, those are not rendering to SVGs.
this code doesn't work on internet explorer any solution for this issue??
Yeah don't use Internet Explorer ;)
@z1haze @engray I've adjusted the plain Javascript version to work with fetch.