2011-08-26 83 views
0

我在這個問題在IE瀏覽器的智慧結尾。我有一個contenteditable屬性設置爲「true」的元素。裏面有各種元素,其中一些不能被改變,文本用CSS類名稱「uneditable」包裹在跨度中。Rangy - Range.setStartAfter在IE中

使用「keydown」事件的處理程序檢查選擇的anchorNode。如果anchorNode是不可編輯元素的文本節點,則範圍將被更改並設置爲在不可編輯元素節點之後開始。這適用於所有瀏覽器,除了名爲IE的可憎的 。

看看下面的例子:

Lorem ipsum dolor sit <span class="uneditable">amet</span>, 
consectetur adipisicing elit 

如果光標處於不可編輯元素的末尾,按下任意字符鍵 應該添加到下一textnode的開始。但在IE中, 的文本被添加到不可編輯元素的末尾。

這裏是處理:

$("#myeditor").keydown(function(ev) 
{ 
    var sel = rangy.getSelection(); 
    var range = sel.getRangeAt(0); 
    if (sel.anchorNode.nodeType == 3) 
    { 
      if ($(sel.anchorNode.parentNode).is(".uneditable")) 
      { 
        range.setStartAfter(sel.anchorNode.parentNode); 
        rangy.getSelection().setSingleRange(range); 
      } 
    } 
}); 

即使我選擇了下一個兄弟和使用range.setStart(nextSibling,0),IE仍然增加了不可編輯元素中的新文本。如何防止IE編輯我的無法編輯的元素?

任何幫助將不勝感激。

+0

你能不能設置'CONTENTEDITABLE =「假」'上不可編輯的要素是什麼?我想我以前留下了一個答案,但可能不會。 –

+0

看來,IE會忽略嵌套元素的contenteditable屬性。 – Raybiez

回答

1

問題是,IE根本不允許您將脫字符號放在該位置,而是「糾正」它在前一個字符的末尾。 WebKit實際上也做同樣的事情。一個例子見http://jsfiddle.net/MZuFb/1/

我能想到的唯一的解決方法是插入一個臨時的角色,並選擇它,這樣它就會被覆蓋:http://jsfiddle.net/timdown/MZuFb/2/

+0

這是一個很棒的建議,謝謝! – Raybiez