contenteditable が true に設定された div タグがあります。divで最後に入力された単語を見つけようとしています。
たとえば、入力しThis is a test
てスペースを押すと、単語を取得できるようにしたいtest
このロジックを使用して、入力されている各単語をテストできるようにしたいと考えています (スペースが押された後)。
誰かがこれで私を助けることができれば、それは素晴らしいことです.
contenteditable が true に設定された div タグがあります。divで最後に入力された単語を見つけようとしています。
たとえば、入力しThis is a test
てスペースを押すと、単語を取得できるようにしたいtest
このロジックを使用して、入力されている各単語をテストできるようにしたいと考えています (スペースが押された後)。
誰かがこれで私を助けることができれば、それは素晴らしいことです.
簡単な解決策は次のとおりです
var str = "This is a test "; // Content of the div
var lastWord = str.substr(str.trim().lastIndexOf(" ")+1);
古いブラウザーでは、trim に shim が必要になる場合があります。( .replace(/\s$/,"")
)
句読点を削除" Test!!! "
するには、さらに次のような置換を行うことができます。
lastWord.replace(/[\W]/g,"");
\W
必要に応じて、省略する文字をより具体的に定義したい場合があります。
スペースだけでなく句読点文字でもイベントハンドラーをトリガーする場合は、最後の置換は必要ありません。
// listen to changes (do it any way you want...)
document.querySelectorAll('div')[0].addEventListener('input', function(e) {
console.log( getLastWord(this.textContent) );
}, false);
function getLastWord(str){
// strip punctuations
str = str.replace(/[\.,-\/#!$%\^&\*;:{}=\_`~()]/g,' ');
// get the last word
return str.trim().split(' ').reverse()[0];
}
まず、いつコンテンツが編集されたかを知る必要があります。jQueryを使用して、それを行うことができます
$("div").on("keyup", function(){ /* code */ });
次に、テキスト全体を取得して単語に分割する必要があります
var words = $(this).text().trim().split(' ');
words
最後の単語を取得することは、配列の最後の要素を取得するのと同じくらい複雑です。
HTML
<div contenteditable="true">Add text here</div>
JavaScript (jQuery を使用) </p>
$("div").on("keyup", function(){
var words = $(this).text().trim().split(' '),
lastWord = words[words.length - 1];
console.log(lastWord);
});
これを試して、編集可能な div から最後の単語を取得できます。
HTML
<div id='edit' contenteditable='true' onkeypress="getLastWord(event,this)">
</div>
JS
function getLastWord(event,element){
var keyPressed = event.which;
if(keyPressed == 32){ //Hits Space
var val = element.innerText.trim();
val = val.replace(/(\r\n|\n|\r)/gm," ");
var idx = val.lastIndexOf(' ');
var lastWord = val.substring(idx+1);
console.log("Last Word " + lastWord);
}
}
このリンクを試してくださいhttp://jsfiddle.net/vV2mN/18/