2016-03-03 56 views
0

我想在文本中查找並替換@jo for @josh在jquery中更改單詞一次

我的問題是,如果我繼續單擊跨度輸出成爲這樣的事情:

@joshshsh 

JS

$(document).on("click", ".cclass", function() { 

var p = '@jo'; 
var username = '@josh'; 

$("#comment").val($("#comment").val().replace(p, username)); //want to replace @jo to @josh just once 

}); 

什麼想法?

https://jsfiddle.net/pL6ut0ac/

+0

當您完成更換時刪除點擊事件? – Mistergreen

回答

1

我看到有兩種方式:

用正則表達式:

$(document).on("click", ".cclass", function() { 
    var p = new RegExp("@jo\\b"); 
    var username = '@josh'; 
    $("#comment").val($("#comment").val().replace(p, username)); //want to replace @jo to @josh just once 
}); 

jsFiddle example

或者只是通過添加一個空格

$(document).on("click", ".cclass", function() { 
    var p = '@jo '; 
    var username = '@josh '; 
    $("#comment").val($("#comment").val().replace(p, username)); //want to replace @jo to @josh just once 
}); 

jsFiddle example

+0

爲什麼'@'前面的雙反斜槓? –

+0

@JohnHascall - 你需要從反斜槓中跳出斜線。 – j08691

+0

讓我重新表述 - 爲什麼'@'在它前面需要一個反斜槓。在我看來,'RegExp(「@ jo \\ b」);'也會起作用。 –

1

嘗試改變與所述。一。對方法。

$(document).one("click", ".cclass", function() { /**/ }); 

一個方法只會觸發綁定事件一次。

鏈接在這裏:https://jsfiddle.net/pL6ut0ac/1/

編輯:

可以使用。數據方法來設置點擊的元素上的任意數據

$(this).data('paramName', paramValue); 

鏈接:https://jsfiddle.net/pL6ut0ac/4/

+0

哦,.one很好,但是我想在此之後使用該功能用於其他刻痕。 jo和josh只是一個例子,我會從不同用戶的不同跨度獲得這個值。 –

2

可以使用RegExp的權力,這裏使用\b作爲字邊界: 只要改變:

var p = '@jo'; 

到:

var p = /@jo\b/; 

它將只替換@jo在那裏其次是一些 「無字」 的字符,如:
@jo,@anna@jo @anna,但不@josh )。