@genteeklaik

Почему этот код корректно работает только один раз?

идея такова, при нажатии enter идет перенос строки через
и указатель вместе с ним
но почему то при втором и так далее нажатий добавляются больше чем один раз
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
 <div onkeyup="obr()" id="ds" contenteditable="true">
var x = 0;</div>
 <script>
  function getCursorPosition(parent) {
  let selection = document.getSelection()
  let range = new Range
  range.setStart(parent, 0)
  range.setEnd(selection.anchorNode, selection.anchorOffset)
  return range.toString().length
}

function setCursorPosition(parent, position) {
  let child = parent.firstChild
  while(position > 0) {
    let length = child.textContent.length
    if(position > length) {
      position -= length
      child = child.nextSibling
    }
    else {
      if(child.nodeType == 3) return document.getSelection().collapse(child, position)
      child = child.firstChild
    }
  }
}
  function obr(){
   var text = document.getElementById("ds")
   text = text.innerHTML
   text = text.replace(/var /gi,"<span style='color:red;'>var </span>")
   var icursor = getCursorPosition(document.getElementById("ds"))
   //console.log(icursor)
   document.getElementById("ds").innerHTML = text
   setCursorPosition(document.getElementById("ds"), icursor)

 //   var range = document.createRange();
	// var myDiv = document.getElementById("ds");
	// range.setStart(myDiv, 5);
	// range.setEnd(myDiv, 5);
	
 }
 document.addEventListener('keydown', function(event) {
		
   if(event.key == "Enter"){
   		//console.log("d")
   		icursor = getCursorPosition(document.getElementById("ds"))
   		document.getElementById("ds").innerHTML += "<br> "
   		setCursorPosition(document.getElementById("ds"), icursor+=1)
   }})
</script>
</body>
</html>
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Sportrecs Москва
от 150 000 до 200 000 ₽