2013-04-04 65 views
1

是否有可能將此查詢縮減爲一個?jQuery縮短這個查詢?

$('p:contains(Tel:)').html(function() { 
    return $(this).html().replace('Tel:', '<strong>Tel:</strong>'); 
}); 
$('p:contains(Fax:)').html(function() { 
    return $(this).html().replace('Fax:', '<strong>Fax:</strong>'); 
}); 

我的代碼查找電話:,傳真:,並與<strong>標籤包裝他們

+0

我不明白這兩個 「題外話」 密切票... – 2013-04-04 07:35:59

回答

5

您可以將它們合併爲:

$('p:contains(Tel:), p:contains(Fax:)').html(function(_, html) { 
    return html.replace(/(Tel\:|Fax\:)/g, '<strong>$1</strong>'); 
}); 

但事實上,這是一個有點多餘:你在你自己做之前,請求jQuery進行第一次搜索。

我個人比較喜歡這樣的:

$('p').each(function() { 
    var html = $(this).html(); 
    var changed = html.replace(/(Tel\:|Fax\:)/g, '<strong>$1</strong>'); 
    if (changed!=html) $(this).html(changed); 
}); 

Demonstration(點擊「與JS運行」

+0

由於良好因爲都看起來,我得到一個語法錯誤的正則表達式 – ngplayground 2013-04-04 08:27:14

+0

對不起,有一個括號太多。固定。 – 2013-04-04 08:29:01

+1

當使用帶'.html()'的回調函數時,jquery將索引和當前的html傳遞給該回調函數。使用這個,第一個例子可以被重寫爲:'$('p:contains(Tel :),p:contains(Fax :)')。html(function(_,html)return html.replace(/(電話\:|傳真\:)/ g,'$ 1'); });'。因此,不需要重複調​​用'.html()'(demo:http://jsbin.com/uzexid/1/) – Yoshi 2013-04-04 08:36:25