"contenteditable"이 true로 설정된 div가 있습니다.입력 된 텍스트를 범위 내에서 contenteditable elememt로 묶을 수 있습니까?
이제 새로 입력 된 텍스트를 하나의 스팬에 래핑하려고합니다. 편집 된 텍스트를 강조 표시 할 수 있습니다. 내가 지금 어디에 있어요 여기
입니다 - http://jsfiddle.net/ug4xr9x0/
HTML
<div contenteditable="true" id="myContent">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi suscipit tincidunt leo, non volutpat lectus sodales non. Phasellus id felis ultrices, egestas enim nec, ornare quam. Ut at posuere felis, vitae sodales risus. Suspendisse velit nibh, facilisis et ante et, vehicula facilisis velit.</div>
자바 스크립트 이것은 스팬 ARO를 래핑 CSS
.highlight{
background-color:yellow;
}
document.getElementById('myContent').addEventListener('keydown',function(evt){
var range = window.getSelection().getRangeAt(0);
if(range.startContainer.parentNode.className!=='highlight'){
var newElement = document.createElement('span');
newElement.className = 'highlight';
newElement.innerHTML = String.fromCharCode(evt.which);
range.insertNode(newElement);
range.setStartAfter(newElement);
evt.preventDefault();
}
});
und 문자이지만 캐럿을 스팬으로 이동하지 않으므로 역방향 입력이 발생합니다. keydown이 듣기에 적절한 이벤트인지, 심지어 키 누르기를 차단하고 요소를 삽입하는 것이 올바른지는 확실하지 않습니다. 줄 range.setStartAfter
은 캐럿을 따라 움직이기위한 시도 였지만, 캐럿의 유무에 관계없이 동일하게 동작합니다.
나는 또한 선택한 텍스트가 입력이 시작될 때 즉시 삭제되지 않도록하고 싶습니다.
도움을 주시면 감사하겠습니다. 감사.
감사합니다. Teemu, Chrome에서 작동해야한다고 말했어 야합니다. 당신의 바이올린이 크롬에서 작동하지 않았을 때 나는 파이어 폭스에서 이것을보기로 결심했습니다. 내 원래 코드는 크롬보다 firefox에서 다르게 작동하는 것 같습니다. 내 주요 문제는 문자가 Chrome에서 거꾸로 있다는 점입니다. 감사 – Ben