2013-02-19 53 views
4

當我在一個contenteditable div內插入一個html標籤時,我需要將光標移到新插入的元素的外部(向右),所以如果我繼續類型,新文本將是未格式化的。Contenteditable:將光標移動到插入的html節點(webkit/ie)外部

與Firefox我發現這個解決方案工作得很好:

node = document.createElement("strong"); 
node.innerHTML = "test"; 

range.deleteContents(); 
range.insertNode(node); 
range.collapse(false); 

可變範圍設置是這樣的:

if (window.getSelection) { 
    var sel = window.getSelection(); 
    if (sel.getRangeAt && sel.rangeCount) { 
     range = sel.getRangeAt(0); 
    } 
} 

使用WebKit瀏覽器上面的代碼(瀏覽器/ Safari瀏覽器)把光標放在新標籤的外面,但是放在左邊。

是否有解決方案(Chrome/Safari)和IE支持(主要是9,可選8)?

感謝

========================================= ====

感謝Tim對他的建議,這裏的工作代碼:

var node = document.createElement("strong"); 
node.innerHTML = "test"; 

var space = document.createElement("span"); 
space.innerHTML = "\u200B"; 

range.insertNode(space); 
range.insertNode(node); 
range.collapse(false); 

var sel = window.getSelection(); 
sel.removeAllRanges(); 
sel.addRange(range); 

回答

5

您需要重新選擇的範圍在非Mozilla瀏覽器。這將工作在所有主流瀏覽器除了IE以外< = 8:

var sel = window.getSelection(); 
sel.removeAllRanges(); 
sel.addRange(range); 

對於IE < = 8,你可以使用不同的方法。下面是一個完整的例子我的另一個答案:

https://stackoverflow.com/a/4836809/96100

+0

感謝蒂姆,光標現在移到正確的權利,但如果我鍵入的文本的格式,所以光標仍在標籤 – 2013-02-19 12:23:52

+0

內@ TedR:那是因爲一些瀏覽器(特別是WebKit和IE)已經設定了關於脫字符可以在文檔中的哪個位置的想法,並且將選擇適合這些想法的任何範圍進行標準化。唯一的解決方法是繞過它:例如,在插入的元素之後添加一個零寬度的空格字符。這不好。 – 2013-02-19 12:38:27

+0

感謝蒂姆,我編輯了與工作代碼 – 2013-02-19 13:38:46

相關問題