我正在尝试在跨度中包装商品的价格。现在,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>"));
});
答案 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);
});