在jquery中只更改一次单词

时间:2016-03-03 14:38:49

标签: jquery

我想在文本中找到并替换@jo @josh

我的问题是,如果我一直点击span,输出会变成这样:

@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/

3 个答案:

答案 0 :(得分:2)

您可以使用RegExp的强大功能,此处使用\b作为字边界: 只需改变:

var p = '@jo';

为:

var p = /@jo\b/;

它只会替换@jo后面跟着一些"非单词"性格,如:
@jo,@anna @jo @anna,但不是@josh)。

答案 1 :(得分:1)

尝试使用.one更改.on方法。

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

一个方法只会触发绑定事件一次。

链接到这里:https://jsfiddle.net/pL6ut0ac/1/

编辑:

您可以使用.data方法在点击的元素上设置任意数据

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

link:https://jsfiddle.net/pL6ut0ac/4/

答案 2 :(得分: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