2015-02-24 53 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>'); 
});