Это можно сделать, но это громоздко.
Сначала вы должны получить externalHTML вашего элемента svg
var mySvg = document.getElementById("mySvg").outerHTML;
Это вернет что-то вроде
<svg id="mySvg" viewBox="0 0 2800 1600"><circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red"></circle> </svg>
Теперь нам нужно «внедрить» атрибуты width и height.К сожалению, объект String Javascript не предлагает встроенного способа вставки текста в определенную позицию, поэтому для этого нам нужно использовать нашу собственную функцию.
String.prototype.splice = function(index, charsToRemove, str) {
return this.slice(0, index) + str + this.slice(index + Math.abs(charsToRemove));
};
var width = 200;
var height = 300;
mySvg = mySvg.splice(mySvg.indexOf("svg") + 3, 0, ' width="' + width + '" height="' + height + '"');
Это то, как он будет выглядеть потом
<svg width="200" height="300" id="mySvg" viewBox="0 0 2800 1600">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red"></circle>
</svg>
Наконец, давайте избавимся от атрибута viewBox .Для этого нам нужно получить его начальный индекс внутри mySvg и оттуда получить индексы для первого " и последнего " .С помощью start- и endindex мы можем использовать метод splice () еще раз.
var startIndex = mySvg.indexOf("viewBox");
var endIndex = startIndex;
var occurences = 0;
do {
if (mySvg.charAt(endIndex) == '"') {
occurences++;
}
endIndex++;
}
while (occurences < 2);
mySvg = mySvg.splice(startIndex,endIndex-startIndex,'');
и изменить externalHTML элемента svg
document.getElementById("mySvg").outerHTML = mySvg;
Вот полный пример:
String.prototype.splice = function(index, charsToRemove, str) {
return this.slice(0, index) + str + this.slice(index + Math.abs(charsToRemove));
};
function modify(width, height) {
var mySvg = document.getElementById("mySvg").outerHTML;
mySvg = mySvg.splice(mySvg.indexOf("svg") + 3, 0, ' width="' + width + '" height="' + height + '"');
var startIndex = mySvg.indexOf("viewBox");
var endIndex = startIndex;
var occurences = 0;
do {
if (mySvg.charAt(endIndex) == '"') {
occurences++;
}
endIndex++;
}
while (occurences < 2);
mySvg = mySvg.splice(startIndex, endIndex - startIndex, '');
document.getElementById("mySvg").outerHTML = mySvg;
}
<button onclick="modify(400,300)">modify</button>
<svg id="mySvg" viewBox="0 0 2800 1600">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>