Javascript 找到所有英制单位并替换为公制单位
我正在寻找一种方法,通过整个网站查找英制单位,例如磅、英尺、英寸,并将它们转换为公制值、千克、米、厘米 例如:Javascript 找到所有英制单位并替换为公制单位,javascript,jquery,Javascript,Jquery,我正在寻找一种方法,通过整个网站查找英制单位,例如磅、英尺、英寸,并将它们转换为公制值、千克、米、厘米 例如: <main> <h1>Top speed of new car is 300mph/h</h1> <p> Such a fast car, previously going only 250 mph, now topping speeds up to 300mph. And it only weighs 300lb
<main>
<h1>Top speed of new car is 300mph/h</h1>
<p>
Such a fast car, previously going only 250 mph, now topping speeds up to 300mph.
And it only weighs 300lbs, 20 pounds less than before!
</p>
</main>
新车的最高时速为300英里/小时
这是一辆速度如此之快的汽车,以前时速只有250英里,现在最高时速可达300英里。
它只有300磅重,比以前轻了20磅!
变成:
<main>
<h1>Top speed of new car is 482.8km/h</h1>
<p>
Such a fast car, previously going only 402km/h, now topping speeds up to 482.8km/h.
And it only weighs 136kg, 9kg less than before!
</p>
</main>
新车最高时速为482.8km/h
如此之快的汽车,以前只有402公里/小时,现在最高速度达到482.8公里/小时。
而且它的重量只有136公斤,比以前少了9公斤!
问题不在于如何将英里/小时/磅转换为公里/小时/千克,而在于如何以良好的方式查找和存储诸如“10英里/小时”、“10英里/小时”、“200磅”、“200磅”等值,将其转换并最终替换
任何指针都会非常有用
编辑我想要实现的简化示例:
<p>This is 10 lbs</p>
<p>This is 20lbs</p>
<script>
$('p').each(function(){
var text = $(this).text().toLowerCase();
if(text.indexOf('lbs') >= 0) {
// Store "XX lbs" in a variable
// Wrap the above created variable in a <span>
// Convert the variable to kg
// Replace the text in <span> with the value in kilogram
// Output: <p>This is <span>4.5kg</span></p>
}
});
</script>
这是10磅
这是20磅
$('p')。每个(函数(){
var text=$(this.text().toLowerCase();
if(text.indexOf('lbs')>=0){
//将“XX磅”存储在变量中
//将上面创建的变量包装到
//将变量转换为kg
//将中的文本替换为以千克为单位的值
//输出:这是4.5kg
}
});
无耻插头:
可嵌入页面的JavaScript代码,用于在公制(SI)单位和英制/美制单位之间转换页面中的单位,以及允许灵活选择显示单位的CSS
有一个页面显示了它是如何工作的。它有一些偏差,例如“度”被认为是指温度而不是角度。无耻插头:
可嵌入页面的JavaScript代码,用于在公制(SI)单位和英制/美制单位之间转换页面中的单位,以及允许灵活选择显示单位的CSS
有一个页面显示了它是如何工作的。它有一些偏差,例如“度”被认为是指温度而不是角度。无耻插头:
可嵌入页面的JavaScript代码,用于在公制(SI)单位和英制/美制单位之间转换页面中的单位,以及允许灵活选择显示单位的CSS
有一个页面显示了它是如何工作的。它有一些偏差,例如“度”被认为是指温度而不是角度。无耻插头:
可嵌入页面的JavaScript代码,用于在公制(SI)单位和英制/美制单位之间转换页面中的单位,以及允许灵活选择显示单位的CSS
有一个页面显示了它是如何工作的。它有一些偏差,例如,假设“度”指的是温度而不是角度。好的,您可以从构建单位映射开始,这些单位应该从什么转换为什么以及它们的转换率:
var unitMapping = {
mph : { unit : 'km/h', ratio : 1.609 }, // there is no such thing as mph/h ?
lbs : { unit : 'kg', ratio : 0.45 },
pounds : { unit : 'kg', ratio : 0.45 }
};
现在需要用正确的值替换文本。首先创建一个与所有单位匹配的regexp:
var regexp = new RegExp('(\\d*) ?(' + Object.keys(unitMapping).join('|') + ')', 'g');
编写一个巧妙的替换函数,该函数接受非标准单位并返回标准单位:
var replaceFunction = function(match, value, unit){
return value*unitMapping[unit].ratio + unitMapping[unit].unit;
};
最后,通过将文本替换为正确的版本,将所有内容整合在一起:
var replaceNode = document.querySelector('main');
replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp, replaceFunction);
演示:
如您所见,unitMapping中存在一些重复。通过使映射依赖于规范化单位,显然可以改进解决方案,但我选择了此选项,因为它使SO post的代码更清晰。您可以从构建单位映射开始,该映射应从什么转换为什么以及它们的转换率:
var unitMapping = {
mph : { unit : 'km/h', ratio : 1.609 }, // there is no such thing as mph/h ?
lbs : { unit : 'kg', ratio : 0.45 },
pounds : { unit : 'kg', ratio : 0.45 }
};
现在需要用正确的值替换文本。首先创建一个与所有单位匹配的regexp:
var regexp = new RegExp('(\\d*) ?(' + Object.keys(unitMapping).join('|') + ')', 'g');
编写一个巧妙的替换函数,该函数接受非标准单位并返回标准单位:
var replaceFunction = function(match, value, unit){
return value*unitMapping[unit].ratio + unitMapping[unit].unit;
};
最后,通过将文本替换为正确的版本,将所有内容整合在一起:
var replaceNode = document.querySelector('main');
replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp, replaceFunction);
演示:
如您所见,unitMapping中存在一些重复。通过使映射依赖于规范化单位,显然可以改进解决方案,但我选择了此选项,因为它使SO post的代码更清晰。您可以从构建单位映射开始,该映射应从什么转换为什么以及它们的转换率:
var unitMapping = {
mph : { unit : 'km/h', ratio : 1.609 }, // there is no such thing as mph/h ?
lbs : { unit : 'kg', ratio : 0.45 },
pounds : { unit : 'kg', ratio : 0.45 }
};
现在需要用正确的值替换文本。首先创建一个与所有单位匹配的regexp:
var regexp = new RegExp('(\\d*) ?(' + Object.keys(unitMapping).join('|') + ')', 'g');
编写一个巧妙的替换函数,该函数接受非标准单位并返回标准单位:
var replaceFunction = function(match, value, unit){
return value*unitMapping[unit].ratio + unitMapping[unit].unit;
};
最后,通过将文本替换为正确的版本,将所有内容整合在一起:
var replaceNode = document.querySelector('main');
replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp, replaceFunction);
演示:
如您所见,unitMapping中存在一些重复。通过使映射依赖于规范化单位,显然可以改进解决方案,但我选择了此选项,因为它使SO post的代码更清晰。您可以从构建单位映射开始,该映射应从什么转换为什么以及它们的转换率:
var unitMapping = {
mph : { unit : 'km/h', ratio : 1.609 }, // there is no such thing as mph/h ?
lbs : { unit : 'kg', ratio : 0.45 },
pounds : { unit : 'kg', ratio : 0.45 }
};
现在需要用正确的值替换文本。首先创建一个与所有单位匹配的regexp:
var regexp = new RegExp('(\\d*) ?(' + Object.keys(unitMapping).join('|') + ')', 'g');
编写一个巧妙的替换函数,该函数接受非标准单位并返回标准单位:
var replaceFunction = function(match, value, unit){
return value*unitMapping[unit].ratio + unitMapping[unit].unit;
};
最后,通过将文本替换为正确的版本,将所有内容整合在一起:
var replaceNode = document.querySelector('main');
replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp, replaceFunction);
演示:
如您所见,unitMapping中存在一些重复。通过使映射依赖于规范化单位,显然可以改进解决方案,但我选择了此选项,因为它使SO帖子的代码更清晰。我认为我们可能会让您开始,但您编写一点代码可能会更好。因此,假设所有文本都是XXXlbs XXXpounds XXX,您将使用variablename=$('div').html()读取文本,然后使用js搜索单位,向后搜索上一个空格,获取数字,进行转换