首页 > 解决方案 > 使用jQuery从字符串中提取十进制数,其中有一堆其他值

问题描述

我正在尝试使用 jquery 从 div(因此在字符串中)中提取十进制数。我的问题是我不能使用值(这对我来说可能是理想的)所以我必须处理一个字符串。

我的另一个问题是,不幸的是,在我的字符串中还有其他数字。

所以我在我的号码前面加了一个美元符号,这样我就可以很容易地隔离它。

我的数组如下(此时只是一个带有一些选择的选项标签):

<select id="easypost" name="shipping_method">
    <option>
        Select shipping method...
    </option>
    <option value="2">
        Priority $38.565
    </option>
    <option value="1">
        ExpeditedParcel $19.56
    </option>
    <option value="3">
        RegularParcel $19.56
    </option>
    <option value="4">
        Xpresspost $24.66
    </option>
    <option value="5">
        PurolatorExpress9AM $84.855
    </option>
    <option value="6">
        PurolatorExpress1030AM $52.665
    </option>
    <option value="7">
        PurolatorExpress $32.175
    </option>
    <option value="8">
        PurolatorGround $31.605
    </option>
</select>

我正在用我的结果做一些数学运算,但重要的部分是变量双数。我只需要在我猜的美元符号之后提取数字,但我愿意收集关于这个主题的更好建议。

$('#easypost').change(function() {
    var shipping = $("#easypost option:selected").text();
    var doublenumber = Number(shipping.replace(/[^0-9\.]+/g, ""));
    var tax_per = ((doublenumber / 100) * 13).toFixed(2) / 1;
    var finaltotal = (totnumber + doublenumber + tax_per).toFixed(2) / 1;
    console.log(doublenumber + " " + tax_per + " " + finaltotal);
    $('.total').text(finaltotal);
}

如您所见,我的问题是当我尝试从 PurolatorExpress9AM 84.855 美元或 PurolatorExpress1030AM 52.665 美元中​​提取值时。

标签: jqueryregexdecimal

解决方案


$('#easypost').on('input', function(){

  //version using the text
  //get the text and trim it
  var value = $('option:selected', this).text().trim();
  //ignore the first option
  if (value.indexOf('$') > -1) {
    //get all the text after the $ and parse it
    value = parseFloat(value.substr(value.indexOf('$') + 1));
    console.log(value);
  }
  
  
  
  //version using the data field
  var value2 = $('option:selected', this).data('cost');
  
  if (value2) {
    console.log(value2);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="easypost" name="shipping_method">
  <option>
    Select shipping method...
  </option>
  <option value="2" data-cost="38.565">
    Priority $38.565
  </option>
  <option value="1" data-cost="19.56">
    ExpeditedParcel $19.56
  </option>
  <option value="3" data-cost="19.56">
    RegularParcel $19.56
  </option>
  <option value="4" data-cost="24.66">
    Xpresspost $24.66
  </option>
  <option value="5" data-cost="84.855">
    PurolatorExpress9AM $84.855
  </option>
  <option value="6" data-cost="52.665">
    PurolatorExpress1030AM $52.665
  </option>
  <option value="7" data-cost="32.175">
    PurolatorExpress $32.175
  </option>
  <option value="8" data-cost="31.605">
    PurolatorGround $31.605
  </option>
</select>


推荐阅读