所以我正在制作px转换器的em,当你在“px”textarea中粘贴css时,它会将每个px值转换为em。如果你输入类似“填充:10px;”的东西,它会起作用。然后转换,但如果你输入“填充:10px 0 40px 0;”它只将“10px”改为“10em”。我想让它转换所有这些,而不仅仅是停在第一个。有什么想法吗?
这是jsFiddle :: http://jsfiddle.net/CJamj/
function pxToEm(){
var px = document.getElementById("px"),
em = document.getElementById("em"),
parent = document.getElementById("parent-font-size");
var pxVal = px.value.match(/\d+/g);
var pxToEm = 1 / parent.value * pxVal;
var pxToEmFixed = pxToEm.toFixed(3);
var pxToEmAnswer = px.value.replace(pxVal, pxToEmFixed).replace("px", "em");
em.value = pxToEmAnswer;
}
答案 0 :(得分:2)
Javascript replace()方法在第一个字符串中搜索指定的值,并返回一个新的字符串,其中替换了指定的值。 javascript中没有这样的方法replaceAll()。因此,要实现这一点,我们必须使用正则表达式在字符串中进行搜索。
最简单的方法是,使用正则表达式" g"标志来替换所有实例:
试试这个:
px.value.replace(pxVal, pxToEmFixed).replace(/px/g, "em")
将px转换为em:
function pxToEm(){
var px = document.getElementById("px"),
em = document.getElementById("em"),
parent = document.getElementById("parent-font-size");
var pxVal = px.value.match(/\d+px/g).toString().split(',');
var lengthValue = pxVal.length;
var pxToEmAnswer;
for(var i = 0; i < lengthValue; i++)
{
var valueToBeReplced = pxVal[i].replace(/px/g, "");;
var valueToBeReplcedExp = new RegExp(valueToBeReplced, "ig");
pxToEmAnswer = px.value.replace(valueToBeReplcedExp, (1/parseInt(parent.value) * valueToBeReplced).toFixed(3));
}
em.value = pxToEmAnswer.replace(/px/g, "em");
}