如何在跨度正则表达式中包装价格?

时间:2018-10-17 18:04:51

标签: javascript jquery regex price

我正在尝试在跨度中包装商品的价格。现在,RegExp会包装数字,但不会包装$(美元符号)。我需要一个包装整个价格的正则表达式。

HTML
<fieldset>
  <label>
   <input>Thing $4.99</input>
  </label>
</fieldset>

JQUERY
    var rxp = new RegExp("([0-9]+\.?[0-9]+)", "gm");
      $( "fieldset label" ).each(function() {                
        var $this = $(this);
        var content = $this.html();
        console.log($(this).html());
        $this.html(content.replace(rxp, "<span>$1</span>"));
      });

1 个答案:

答案 0 :(得分:2)

这不是正确的方法。 html()方法将为您返回html标记,但更改它不会更改DOM。相反,您应该清空父级并在其中附加新的跨度。另外,您以错误的方式使用了input标签,它不能有子级,您应该将值设置为value attr:

// HTML
<fieldset>
  <label>
   <input value="Thing $4.99" />
  </label>
</fieldset>

// JavaScript
var priceRegExp = /^.*(\$[0-9](\.[0-9]{2})?).*$/;
$("fieldset label").each(function() {                
  var $this = $(this);
  var inputVal = $this.children('input').prop('value');
  var price = priceRegExp.exec(inputVal)[1];
  $this.empty().append('span').text(price);
});