2016-09-29 57 views
0

首先我想告诉你我是JQuery的初学者。如果我在文本框中键入“A”,即想要替换为“B”,我试图在文本框上实时替换翻译器。为翻译打字时替换实时文本框的值

这是要检查最多3个单词。这意味着,

  1. 如果我输入“A”的文本框,是想更换为“X”

  2. 如果我输入“AB”文本框是要替换为“Y”

  3. 如果我输入“ABZ”上是要替换为“Z”更换后

其他的事情,如果我输入一些词,也想更换中间的文本框中。 例如,如果我在XY之间键入ABZ,那就是要替换XZY。

HTML代码:

<textarea type="text" name="fname" class="chatinput" style="margin: 0px; width: 977px; height: 324px;"> </textarea> 

请帮助建立这个使用JQuery。我试图通过倾向This来做到这一点,但它不工作。

+0

如果您实时替换,如果A用B实时替换,您将如何输入AB? – depperm

+0

OPS对不起,我重新纠正它。这只是一个例子,只有 – user43153

+0

你的编辑没有回答这个问题,如果A被任何东西代替,AB将如何输入,如果你输入A,它将变成X .... – depperm

回答

0

试试这个小提琴:https://jsfiddle.net/L9fe0py3/2/

$(document).ready(function() { 
var dict = [{word:"A",replacement:"B"},{word:"AB",replacement:"C"},{word:"ABZ",replacement:"D"}]; 
    $('#txt').blur(function(){ 
     for(var i=0;i<dict.length;i++){ 
    /* 
    If I typed "A" on text box that is want replace to "B" 
If I typed "AB" on text box that is want to replace to "C" 
If I typed "ABZ" on text box that is want to replace to "D" 
    */ 
     $('#txt').val($('#txt').val().replace(dict[i].word, dict[i].replacement)); 
    } 
    }); 
}); 

您需要更换JSON你需要更换角色,并在文本框模糊,你将有你想要的东西。

+0

这个代码https:// jsfiddle.net/L9fe0py3/2/不适用于我 – user43153

+0

您使用了大写字母,在代码片段上使用大写字母。 –

0

您可以尝试为关键字创建一个对象数组,并对其进行翻译并遍历它,以将文本框中的单词与它们的翻译(如果它们有一个)进行替换。

但是我认为我们应该寻找较长的单词,第一个让“CABZB”不会转化为“CBBZB”,其中“A”是第一翻译“ABZ”之前进行了调查。

请参阅片断如下:

var 
 
    dictionary = [ // Crate array of objects for translation definitions 
 
    { 
 
     word: "A", 
 
     translation: "B" 
 
    }, { 
 
     word: "AB", 
 
     translation: "C" 
 
    }, { 
 
     word: "ABZ", 
 
     translation: "D" 
 
    } 
 
    ], 
 
    $fname = $('#fname'), 
 
    $button = $('#translate'); 
 

 
// Sort dictionary so that longer words are checked first in looping later 
 
dictionary.sort(function(a, b) { 
 
    return b.word.length - a.word.length; 
 
}); 
 

 
$button.click(function() { 
 
    var text = $fname.val(); 
 

 
    // Loop through each item in dictionary and replace where found (prioritizing longer words) 
 
    $.each(dictionary, function(k, v) { 
 
    var regex = new RegExp(v.word, "gim"); // convert keyword to regex (currently case-insensitive) 
 
    text = text.replace(regex, v.translation); 
 
    }); 
 

 
    $fname.val(text); 
 
});
.chatinput { 
 
    width: 500px; 
 
    height: 200px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea id="fname" type="text" name="fname" class="chatinput"></textarea> 
 
<br> 
 
<button id="translate">Translate</button>

老实说,在我看来,我们应该在整个字典不循环,因为它可能会变得非常慢(字典将趋于非常大,如果它包含很多翻译),但为了符合您的需求,单词将在词语中进行搜索和翻译(如“CABZB”到“CDB”),必须完成(我不确定如果有更好的方法,但这是我目前提出的)。

如果你没有真正需要翻译的话,那么我认为最好是循环遍历文本框中的每个单词而不是整个字典。

我希望这会有所帮助。