我有一个字符串,有时包含css字体大小。 例如:
str = '<span style="font-size: 200px;white-space:nowrap;">Text</span>
<br><span style="color:#555555;font-size:10px;">Some otherText</span>';
我需要通过将它们全部乘以例如1.5
的设定比率来更改所有字体大小var ratio = 1.5;
搜索和替换不是我的强项。如何在字符串中搜索所有字体大小,然后对每个数字进行数学计算?
以上具有此比率的字符串将变为:
str = '<span style="font-size: 300px;white-space:nowrap;">Text</span>
<br><span style="color:#555555;font-size:15px;">Some otherText</span>';
答案 0 :(得分:3)
假设将其作为字符串并且没有更好的方法(如果这来自innerHTML
左右,那么你就错了),那么......
var fauxDocFrag = document.createElement("div");
var elements, i, len;
fauxDocFrag.innerHTML = str;
elements = fauxDocFrag.getElementsByTagName("*");
for (i = 0, len = elements.length; i < len; i++) {
elements[i].style.fontSize = (parseInt(elements[i].style.fontSize) * 1.5)
+ "px";
}
str = fauxDocFrag.innerHTML;
如果您的浏览器不吸...
var fauxDocFrag = document.createElement("div");
fauxDocFrag.innerHTML = str;
[].forEach.call(fauxDocFrag.getElementsByTagName("*"), function(element) {
element.style.fontSize = (parseInt(elements.style.fontSize) * 1.5)
+ "px";
});
str = fauxDocFrag.innerHTML;
如果任何声明不在style
属性中,您可以使用getComputedStyle()
。
我没有使用真实的documentFragment
,因为它不支持innerHTML
属性。
答案 1 :(得分:1)
亚历克斯是对的,可能有更好的方法,但用字符串代替答案回答你的问题:
str = str.replace(/(\d+)px/g, function (fullStr, pixels) {
return (pixels * 1.5) + 'px';
});
答案 2 :(得分:0)
您可以使用replace
对象的String
方法,并指定一个函数作为替换值。
str.replace(/font-size:\s*(\d*)/g,
function (line, p1) { return ratio * parseInt(p1) })