JavaScript를 사용하여 HTML 요소를 추가하는 방법을 찾고 있습니다. 그러나 문제는 새로운 요소가 일부 텍스트 사이에있을 수 있다는 것입니다. 다른 모든 경우에는 insertBefore() 메서드를 사용하고 있습니다.텍스트 뒤에 HTML 요소 추가
커서 위치를 가져 오는 데 다음 함수를 사용하고 있습니다. 내 초기 접근 방식은 대상 innerHTML을 분할하고 필요한 태그를 추가했지만 제공된 커서 위치는 공백과 같은 문자 변환을 고려하지 않았습니다.
. 따라서 연속 된 공백이 여러 개있는 경우 커서 위치는 innerHTML에서 코 렉트 위치를 지정하지 않습니다.
function getCursorPos()
{
var cursorPos=-1;
if (window.getSelection)
{
var selObj = window.getSelection();
var selRange = selObj.getRangeAt(0);
cursorPos = findNode(selObj.anchorNode.parentNode.childNodes,
selObj.anchorNode) + selObj.anchorOffset;
/* FIXME the following works wrong in Opera when the document is longer than 32767 chars */
}
else if (document.selection)
{
var range = document.selection.createRange();
var bookmark = range.getBookmark();
/* FIXME the following works wrong when the document is longer than 65535 chars */
cursorPos = bookmark.charCodeAt(2) - 11; /* Undocumented function [3] */
}
return cursorPos;
}
function findNode(list, node)
{
for (var i = 0; i < list.length; i++)
{
if (list[i] == node)
{
return i;
}
}
return -1;
}
다른 방법이 있습니까? 새로운 요소는 HTML의 중간에있을 수 있습니다. 즉, 항상 끝에 있지 않을 수도 있습니다.
이
텍스트는 DOM의 리프 노드입니다. 그래서 가장 좋은 방법은 텍스트를 긁어내어 부모 요소를 얻는 것입니다. 자식 (텍스트)을 삭제하고 새 요소를 추가하고 새 텍스트 노드를 만든 후 appendChild (현재 문자열) 및 텍스트를 분할합니다. – Keith
미안하지만 당신을 얻지 못했습니다. ("가장 좋은 방법은 텍스트를 다듬어 부모 요소를 얻는 것입니다."). 텍스트 노드를 가져오고, 커서 위치를 사용하여 텍스트를 2로 분할하고, text1, newhtml, text2 (그 순서대로)를 추가 하시겠습니까? 하지만 텍스트 앞에 childern과 같은 다른 html 요소가 있다면 어떨까요? –
이전 댓글에 대해 유감 스럽지만 트릭을했습니다. 고맙습니다! –