我正在尋找一種使用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 2011-03-18 06:29:49
對不起,但我沒有得到你。 (「所以最好的方法是刮出文本,獲取父元素」)。你是否建議使用光標位置來獲取文本節點,將文本拆分爲2,追加text1,newhtml,text2(按照該順序)?但是如果在文本之前還有其他html元素作爲childern呢? – 2011-03-18 07:39:58
對於之前的評論我很抱歉,但是這個竅門。謝謝! – 2011-03-18 12:06:26