【发布时间】:2017-05-12 07:14:48
【问题描述】:
我正在尝试实现类似 facebook 聊天窗口的输入框,通过点击空格键文本可以转换为表情符号。使用我的代码,无论何时发生转换,插入符号都会回到 div 的开头。而且,只要 div 中存在文本,我希望调用函数 convert()。但是在一次转换后,代码停止工作,我必须在文本框的外部和内部单击才能进行转换。我怎样才能正确地实现这些东西?
var data={
"value":":)",
"image":"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSaW1KOeceO85Y7KfUXGyLZm1LfTwjhQspKKXUl3D3a5Mo1uz-AhA"
};
$(document).ready(function(){
convert();
function getWord(text){
var word=text.split(" ").pop();
return word;
}
function setCursor(i){
i++;
console.log(i);
var el = document.getElementById("image");
var range = document.createRange();
var sel = window.getSelection();
range.setStartAfter(el);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
function convert(){
document.body.onkeyup=function(e){
var contenteditable = document.querySelector('[contenteditable]');
text = contenteditable.textContent;
if(e.keyCode==32){
var word=getWord(text);
if(word.includes(data.value)){
var i=0;
var img = "<img id='image'"+i+" src='" + data.image +"' class='image' /> ";
console.log(img);
$("#text-box").html(function (_, html) {
return html.replace(data.value , img );
});
setCursor(i);
//$("#text-box").html(text.(replace(data.value,img));
//document.getElementById('textbox').replaceChild(data.value,img);
}
}
}
}
});
<html>
<head>
<style type="text/css">
.image{
position: relative;
max-height: 1.4em;
max-width: 1.4em;
}
[contenteditable]{
-webkit-appearance:textfield;
appearance:textfield;
border: 1px solid black;
line-height:1.4em;
min-height: 20px;
}
</style>
</head>
<body>
<div contenteditable="true" id='text-box'>
</div>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="emoji.js"></script>
<script type="text/javascript" src="data.json"></script>
</body>
</html>
【问题讨论】:
-
请在这里找到这个答案-click here
标签: javascript jquery contenteditable onkeyup