在javascript中,如何从像素值(例如2em或20px)获取单位(例如em或px)?

在javascript中,如何从像素值(例如2em或20px)获取单位(例如em或px)?,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试编写一个函数,该函数将值作为填充的输入,请参见以下简化示例: function createBlocks(container,padding) {} 我希望padding参数是任意值(em、px等)。所以,我需要能够提取值和单位 我可以使用以下方法提取值: var paddingVal=parseFloat(padding) 但我不知道如何提取单位值 有什么想法吗?您可以使用.replace() 更清楚地说。。您是否需要先更换空格 var paddingWithoutSpaces =

我正在尝试编写一个函数,该函数将值作为填充的输入,请参见以下简化示例:

function createBlocks(container,padding) {}
我希望padding参数是任意值(em、px等)。所以,我需要能够提取值和单位

我可以使用以下方法提取值:
var paddingVal=parseFloat(padding)

但我不知道如何提取单位值

有什么想法吗?

您可以使用
.replace()

更清楚地说。。您是否需要先更换空格

var paddingWithoutSpaces = padding.replace(/\s/g, '+');
var paddingVal = parseFloat(padding);
var Newpadding = padding.replace(paddingVal , '');
alert(paddingVal);
alert(Newpadding);
您可以使用
.replace()

更清楚地说。。您是否需要先更换空格

var paddingWithoutSpaces = padding.replace(/\s/g, '+');
var paddingVal = parseFloat(padding);
var Newpadding = padding.replace(paddingVal , '');
alert(paddingVal);
alert(Newpadding);
使用:

函数创建块(填充){
var matches=padding.match(/(\d+)(.+)/),
value=parseFloat(匹配[1]),
单位=匹配项[2];
console.log('值:%d,单位:%s',值,单位);
}
createBlocks('3px');//数值:3,单位:px
createBlocks('12rem');//数值:12,单位:雷姆
使用:

函数创建块(填充){
var matches=padding.match(/(\d+)(.+)/),
value=parseFloat(匹配[1]),
单位=匹配项[2];
console.log('值:%d,单位:%s',值,单位);
}
createBlocks('3px');//数值:3,单位:px
createBlocks('12rem');//数值:12,单位:雷姆

这是一个同样适用于十进制值的版本:

var getUnitValue = function (valueStr) {
    var result = {};
    result.value = parseFloat(valueStr);
    result.unit = valueStr.substr(('' + result.value).length).trim();
    return result;
};

getUnitValue('80.2 px'); // --> {value: 80.2, unit: "px"}

这里有一个版本也适用于十进制值:

var getUnitValue = function (valueStr) {
    var result = {};
    result.value = parseFloat(valueStr);
    result.unit = valueStr.substr(('' + result.value).length).trim();
    return result;
};

getUnitValue('80.2 px'); // --> {value: 80.2, unit: "px"}

澄清:是否要将任何长度转换为像素,还是要使用单位获取子字符串?如果没有相对长度,则无法将相对长度转换为绝对长度。
填充。匹配(/\d(\d+)/[1]
(数字后的所有非数字字符)。澄清一下:您想将任何长度转换为像素,还是想用单位获取子字符串?如果没有相对长度,则无法将相对长度转换为绝对长度。
padding.match(/\d(\d+)/)[1]
(数字后的所有非数字字符)。@Quentin是要求转换的OP吗??(因此,我需要能够提取值和单位。)转换不是问题(如果您感兴趣,这是我使用的方法:)。Mohammed Yousef发布的解决方案非常适合我的需要。Thanks@QuentinOP是否要求转换??(因此,我需要能够提取值和单位。)转换不是问题(如果您感兴趣,这是我使用的方法:)。Mohammed Yousef发布的解决方案非常适合我的需要。谢谢