我有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);
修剪可能需要为旧版浏览器垫片。 ( .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)
$("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/