2015-02-24 112 views
0

HTML文本我有这个网站:替换使用jQuery

<div class="field-item even">0,00 €</div> 

我有这个功能来代替一些文本,工作正常:

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.replace('0,00 €', '<span style="font-size:13px;">No price</span>'); 

}); 

但我需要改变功能这,哪个根本不工作(在console.log中没有错误):

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.replace('>0,00 €<', '><span style="font-size:13px;">No price</span><'); 

}); 

正如你所看到的,我只是添加了一些'<'和'>'。以防万一你想知道为什么我需要这样做:我需要避免函数来替换'150,00€','90,00€'等值。我需要它来取代'0,00€'的值,只有这个。

+2

止跌”尝试正则表达式更有意义吗? – j08691 2015-02-24 14:32:52

+0

当你写'<'而不是''''>'而不是'>'会发生什么?我的意思是单一的,而不是这些html标签的一部分 – reporter 2015-02-24 14:33:24

+1

@reporter - 什么都不会发生,因为它试图将HTML实体与实际的结束标签支架相匹配。 – j08691 2015-02-24 14:36:08

回答

3

你应该用正则表达式

return oldhtml.replace(/^0,00 €$/, '<span style="font-size:13px;">No price</span>'); 
+1

这是正确的答案,也是最简单的。 – j08691 2015-02-24 14:39:33

+0

不错的一个。谢谢。 – JPashs 2015-02-24 14:52:48

1

这是非常不清楚为什么你会需要做到这一点,但:

的问题是><不是HTML的一部分内容.field-info标签的,他们标签。调用.html()不会返回包装当前节点的标签。

鉴于在DOM这个HTML片段...

<div class="field-name-commerce-price"> 
    <div class="field-item even">0,00 €</div> 
</div> 

使用$(.field-item).html()将返回0,00 €,选择标签的HTML内容。没有><匹配。

如果你想替换部分标签本身,你可以去元素的父母。使用$('.field-item').parent().html()将返回与您的replace匹配的嵌套元素的HTML,<div class="field-item even">0,00 €</div>

尝试以下操作:

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.parent().replace('>0,00 €<', '><span style="font-size:13px;">No price</span><'); 

}); 

-

RE:您的更新以防万一你想

知道为什么我需要这样做:我需要避免函数来取代'150,00€','90,00€'等值。我需要它来取代'0,00€'的值,只有这个。

然后,使用><作为您的替换字符串的分隔符是错误的解决方案。 要么使用简单的相等检查...

if ('0,00 €' == $('.field-name-commerce-price .field-item').text()) { 
    $('.field-name-commerce-price .field-item').html('<span style="font-size:13px;">No price</span>'); 
} 

或者,使用正则表达式,并与^$锚您的搜索模式,或者增加伤口界限:

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.replace(/\b0,00 €\b/, '<span style="font-size:13px;">No price</span>'); 
});