Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用Javascript动态添加数据时,如何获取contenteditable div文本末尾的插入符号位置?_Javascript_Jquery_Css - Fatal编程技术网

当使用Javascript动态添加数据时,如何获取contenteditable div文本末尾的插入符号位置?

当使用Javascript动态添加数据时,如何获取contenteditable div文本末尾的插入符号位置?,javascript,jquery,css,Javascript,Jquery,Css,注意:在将其标记为复制之前,请理解我正在使用Javascript中的keypress函数动态添加数据 我正在尝试创建一个脚本,将数据动态添加到contenteditable div中,我可以使用下面的代码实现这一点 var enterPressed = 0; window.onkeypress = function (e) { var keyCode = (e.keyCode || e.which); if (keyCode === 13) {

注意:在将其标记为复制之前,请理解我正在使用Javascript中的keypress函数动态添加数据

我正在尝试创建一个脚本,将数据动态添加到contenteditable div中,我可以使用下面的代码实现这一点

   var enterPressed = 0;
   window.onkeypress = function (e) {
       var keyCode = (e.keyCode || e.which);

       if (keyCode === 13) {
           if (enterPressed === 0) {
               e.preventDefault();
               var z = document.createElement('p'); // is a node
               z.innerHTML = "<br><p>R: ";
               document.getElementById("textbox").appendChild(z);
               enterPressed++;
           } else if (enterPressed === 1) {
               e.preventDefault();
               var z = document.createElement('p'); // is a node
               z.innerHTML = "<br><b>M: ";
               document.getElementById("textbox").appendChild(z);
               enterPressed++;
               enterPressed = 0;

           }
       }
   };
var enterPressed=0;
window.onkeypress=功能(e){
var keyCode=(e.keyCode | | e.which);
如果(键代码===13){
如果(输入按下===0){
e、 预防默认值();
var z=document.createElement('p');//是一个节点
z、 innerHTML=“
R:”; document.getElementById(“文本框”).appendChild(z); 输入++; }否则如果(按enterPressed==1){ e、 预防默认值(); var z=document.createElement('p');//是一个节点 z、 innerHTML=“
M:”; document.getElementById(“文本框”).appendChild(z); 输入++; enterPressed=0; } } };
所以当按下enter键时,我得到M:如果按下enter键两次,我得到R:然后函数复位

问题是,每当我按下enter键时,插入符号位置仍然保留在文档的开头,而理想情况下,它应该在末尾,这样我就可以进一步键入内容


您可以使用此功能将光标移动到末端

function setEndOfContenteditable(contentEditableElement) {
  var range,selection;
  if(document.createRange)//Firefox, Chrome, Opera, Safari, IE 9+
  {
      range = document.createRange();//Create a range (a range is a like the selection but invisible)
      range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range
      range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
      selection = window.getSelection();//get the selection object (allows you to change selection)
      selection.removeAllRanges();//remove any selections already made
      selection.addRange(range);//make the range you have just created the visible selection
  }
  else if(document.selection)//IE 8 and lower
  { 
      range = document.body.createTextRange();//Create a range (a range is a like the selection but invisible)
      range.moveToElementText(contentEditableElement);//Select the entire contents of the element with the range
      range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
      range.select();//Select the range (make it the visible selection
  }
}
当您像这样附加新的子对象时,只需要使用这个函数

let child = document.getElementById("textbox").appendChild(z);
setEndOfContenteditable(child)
这是完整的工作代码

函数setEndOfContenteditable(contentEditableElement){
var范围、选择;
if(document.createRange)//Firefox、Chrome、Opera、Safari、IE 9+
{
range=document.createRange();//创建一个范围(一个范围与所选内容类似,但不可见)
range.selectNodeContents(contentEditableElement);//选择具有范围的元素的全部内容
range.collapse(false);//将范围折叠到终点。false表示折叠到终点而不是起点
selection=window.getSelection();//获取选择对象(允许您更改选择)
selection.removeAllRanges();//删除所有已做的选择
selection.addRange(range);//使刚刚创建的范围成为可见的选择
}
else if(document.selection)//IE 8及更低版本
{ 
range=document.body.createTextRange();//创建一个范围(范围与所选内容类似,但不可见)
range.moveToElementText(contentEditableElement);//使用范围选择元素的全部内容
range.collapse(false);//将范围折叠到终点。false表示折叠到终点而不是起点
range.select();//选择范围(使其成为可见选择
}
}
var=0;
window.onkeypress=功能(e){
var keyCode=(e.keyCode | | e.which);
如果(键代码===13){
如果(输入按下===0){
e、 预防默认值();
var z=document.createElement('p');//是一个节点
z、 innerHTML=“
R:”; 让child=document.getElementById(“文本框”).appendChild(z); setEndOfContenteditable(子级) 输入++; }否则如果(按enterPressed==1){ e、 预防默认值(); var z=document.createElement('p');//是一个节点 z、 innerHTML=“
M:”; 让child=document.getElementById(“文本框”).appendChild(z); setEndOfContenteditable(子级) 输入++; enterPressed=0; } } }; var elem=document.getElementById(“文本框”); setEndOfContenteditable(元素)

JS-Bin
请按回车键

非常感谢您,Sifat,我找到了这个解决方案,但我没有附加它。