我有一個HTML的結構是這樣的:設置插入符位置在「CONTENTEDITABLE」的div有孩子
<div contenteditable="true">This is some plain, boring content.</div>
我也有這個功能,可以讓我設置插入符位置在任何地方我想要的DIV中:
// Move caret to a specific point in a DOM element
function SetCaretPosition(object, pos)
{
// Get key data
var el = object.get(0); // Strip inner object from jQuery object
var range = document.createRange();
var sel = window.getSelection();
// Set the range of the DOM element
range.setStart(el.childNodes[0], pos);
range.collapse(true);
// Set the selection point
sel.removeAllRanges();
sel.addRange(range);
}
此代碼工作完全正常,直到我開始添加子標籤(span, b, i, u, strike, sup, sub)
到div如
<div contenteditable="true">
This is some <span class="fancy">plain</span>, boring content.
</div>
當這些子標籤最後帶有其自己的子標籤時,事情變得更加複雜,例如,
<div contenteditable="true">
This is some <span class="fancy"><i>plain</i></span>, boring content.
</div>
本質上,發生了什麼,是setStart
拋出一個IndexSizeError
當我嘗試SetCaretPosition
比的子標籤的起始較高的指數。 setStart
只有在到達第一個子標籤時纔有效。
我需要的是SetCaretPosition
函數處理未知數量的這些子標籤(可能還有未知數量的嵌套子標籤),以便設置位置的方式與沒有標籤時的方式相同。
所以對於這兩種:
<div contenteditable="true">This is some plain, boring content.</div>
這:
<div contenteditable="true">
This is <u>some</u> <span class="fancy"><i>plain</i></span>, boring content.
</div>
SetCaretPosition(div, 20);
會前 '無聊' 的 'B' 的地方插入符號。
我需要什麼代碼?非常感謝!
謝謝!我最終編寫了一個我自己的函數,它保留了jQuery對象並遞歸地搜索DOM子代,但這也很有用! – John1984