Javascript-在表格单元格中查找多个数值,并将其从厘米转换为英寸

Javascript-在表格单元格中查找多个数值,并将其从厘米转换为英寸,javascript,html,regex,loops,dom,Javascript,Html,Regex,Loops,Dom,我有这个HTML表格: 我尝试做的是循环所有元素-所有表格单元格,查找是否有字符串“cm”,如果是,则将值从cm转换为英寸 所以我写了这段代码: var allDivTd = document.getElementById("sizeadviser_content").getElementsByTagName("TD"); for(var i = 0; i < allDivTd.length; i++){ var td = allDivTd

我有这个HTML表格:

我尝试做的是循环所有元素-所有表格单元格,查找是否有字符串“cm”,如果是,则将值从cm转换为英寸

所以我写了这段代码:

var allDivTd = document.getElementById("sizeadviser_content").getElementsByTagName("TD");

for(var i = 0; i < allDivTd.length; i++){
    var td = allDivTd[i];
    if (td.innerText.includes("cm") === true) {
        //td.innerText = td.innerText+' in';
    }
}
如你所见,我只想更改字符串中包含“cm”的单元格

如何从单元格中获取数值,并使用1位小数将其转换为英寸


问题是因为我不知道单元格中有多少数值。它们的格式可以是20厘米、20-50厘米、20-50厘米或20 | 50厘米。。。等等。

我想你可以使用split/\D来使用regx+/

看看我的例子

功能gtnmbrs{ 变量strng='50-10 | 555厘米'; var nonnmbrs=/\D+/; var rslt=strng.splitnonnmbrs;
对于i=0;i我认为您可以使用split/\D来使用regx+/

看看我的例子

功能gtnmbrs{ 变量strng='50-10 | 555厘米'; var nonnmbrs=/\D+/; var rslt=strng.splitnonnmbrs;
对于i=0;i如果您需要一个非常快速的解决方案,您可以使用这样的方法

function setStr(str) {
  let digit = '';
  let newStr = ''; 
  for (let char of str) {

    if (!isNaN(char)) {
      digit += char;
    } else {
      newStr +=  converter(digit)+ char;
      digit = '';
    }
 }
 return newStr.replace('cm', 'in');
}

function converter(s) {
  if (s) {
    return (parseInt(s)*0.393707).toString();
  }
  return '';
}
或者使用正则表达式

 function parseString(str) {
   var matcher = /\D+/;
   var list = str.split(matcher);
   list.forEach((item) => {
     if (item) {
       str = str.replace(item, (parseInt(item)*0.393707).toString()); 
     } 
   });
   return str.replace('cm', 'in');
}

如果您需要一个非常快速的解决方案,您可以使用这样的解决方案

function setStr(str) {
  let digit = '';
  let newStr = ''; 
  for (let char of str) {

    if (!isNaN(char)) {
      digit += char;
    } else {
      newStr +=  converter(digit)+ char;
      digit = '';
    }
 }
 return newStr.replace('cm', 'in');
}

function converter(s) {
  if (s) {
    return (parseInt(s)*0.393707).toString();
  }
  return '';
}
或者使用正则表达式

 function parseString(str) {
   var matcher = /\D+/;
   var list = str.split(matcher);
   list.forEach((item) => {
     if (item) {
       str = str.replace(item, (parseInt(item)*0.393707).toString()); 
     } 
   });
   return str.replace('cm', 'in');
}

以下是适用于十进制值的版本:

for (var i = 0; i < allDivTd.length; i++) {
  var td = allDivTd[i];    
  if (td.innerText.includes("cm") === true) {

    new_td = td.innerText.replace('cm', '').replaceAll(' ', '');
    for (let char of new_td) {

      if (isNaN(char) && char != ".") {
        new_td = new_td.replace(char, ",").split(',');
        new_td.forEach(function(centim, index, myArray) {

          myArray[index] = (centim * 0.393701).toFixed(2);
        });

        new_td = new_td.toString().replace(',', ' - ') + ' in'

        td.innerText = new_td;
      }
    }

以下是适用于十进制值的版本:

for (var i = 0; i < allDivTd.length; i++) {
  var td = allDivTd[i];    
  if (td.innerText.includes("cm") === true) {

    new_td = td.innerText.replace('cm', '').replaceAll(' ', '');
    for (let char of new_td) {

      if (isNaN(char) && char != ".") {
        new_td = new_td.replace(char, ",").split(',');
        new_td.forEach(function(centim, index, myArray) {

          myArray[index] = (centim * 0.393701).toFixed(2);
        });

        new_td = new_td.toString().replace(',', ' - ') + ' in'

        td.innerText = new_td;
      }
    }

你的答案很好,比如96-104厘米的字符串返回我37.8-40.9英寸,所以空格不在这里。对不起,只是你的代码不能很好地使用十进制值。你也需要保存空格吗?你的答案很好,比如96-104厘米的字符串返回我37.8-40.9英寸,所以空格不在这里。对不起,只是你的代码不能很好地使用h十进制值是否也需要保存空格?抱歉,您的代码与十进制值不兼容。或者,您的代码与十进制值不兼容