0

我有 $("#text") 并且我想这样做,以便当您在 $("text") 中键入单词“替换我”时,它会自动替换为短语“替换成功”和“再见” '你好'

我假设这样做的正确方法是用正则表达式找到“替换”并替换它,这就是我所得到的

          $('#text').keydown(function(){
                var text = $('#text').text();
                var replaceCommand = ['replace me', 'goodbye'];
                var replaceOutput = ['replaced successfully', 'hello'];
                    for (var i=0; i < replaceCommand.length; i++){
                        text.replace(replaceCommand[i]/i, replaceOutput[i]);
                    }
            });
4

4 回答 4

2

如果您的 replaceCommand 数组包含已定义的字符串,则无需使用正则表达式。使用 .replace() 代替。

演示

var replaceCommand = ['replace me', 'goodbye'];
var replaceOutput = ['replaced successfully', 'hello'];

$('#text').keyup(function(){
    var text = $('#text').val();
    for (var i=0; i < replaceCommand.length; i++){
        text = text.replace(replaceCommand[i],replaceOutput[i]);
    }
    $('#text').val(text);
});​

更新 1:我希望你 $('#text') 是一个文本框。所以你需要使用 $('#text').val() 来获取值。.replace() 也将返回替换的字符串。因此,您需要再次将其分配给文本框值。

于 2012-07-24T10:25:22.720 回答
1

改为使用blur文本框。下面的代码不使用正则表达式,但如果下面的代码有帮助,请告诉我:

 $('#text').blur(function(){ 
var text = $('#text').text(); 
var replaceCommand = ['replace me', 'goodbye']; 
var replaceOutput = ['replaced successfully', 'hello'];     
if($(this).val() == replaceCommand [0]){
$(this).val(replaceOutput[0]) ;
    }
else if($(this).val() == replaceCommand [1]){
$(this).val(replaceOutput[1]) ;
    }

});  

工作JSFIDDLE

于 2012-07-24T10:21:52.993 回答
0

你会尝试这样的事情:

$('#text').bind("keydown blur", function(){
                var jText = $(this);
                var newTxt = jText.val().replace(/replace(?!\s*successfully)/gi, "replace successfully");
                jText.val(newTxt);
            });

例子

于 2012-07-24T12:22:10.323 回答
0

这是一种很好的方法,但不确定我是否会使用 keydown ,因为它会在每次按键时触发。但是,如果您必须在输入单词 replace 的最后一个字符后立即拥有它,那么 key down 就是那个(或 key up)。

但是,如果通过鼠标粘贴,它不会触发。因此,您还需要捕获鼠标事件。

如果框中的值是您所需要的,那么 onchange 就可以解决问题,但在您失去焦点之前不会触发(不同的浏览器会有不同的行为)。

于 2012-07-24T10:17:02.427 回答