3

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>';
4

3 に答える 3

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;

jsFiddle .

お使いのブラウザが気に入らなければ...

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

于 2013-01-24T00:11:06.927 に答える
1

アレックスは正しいです。おそらくもっと良い方法がありますが、答えを文字列に置き換えることで質問に答えるには:

str = str.replace(/(\d+)px/g, function (fullStr, pixels) {
  return (pixels * 1.5) + 'px';
});
于 2013-01-24T00:14:59.907 に答える
0

replaceオブジェクトのメソッドを使用しStringて、置換値として関数を指定できます。

str.replace(/font-size:\s*(\d*)/g,
            function (line, p1) { return ratio * parseInt(p1) })
于 2013-01-24T00:14:21.543 に答える