Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 找到所有英制单位并替换为公制单位_Javascript_Jquery - Fatal编程技术网

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搜索单位,向后搜索上一个空格,获取数字,进行转换