我一直在嘗試javascript中的contenteditable字段。正如你可以猜到的,我試圖建立一個所見即所得的編輯器。把Stack Overflow上的答案拼湊在一起,我設法構建了這個test case。測試案例的工作是手動並以編程方式突出顯示文本並對其進行強化。只有一個小問題。如果您單擊一次「粗體」按鈕,則會突出顯示一個子字符串,然後將其變爲粗體。但是,如果您再次單擊它,它會提示一個錯誤:文字突出顯示 - 內容編輯
"Error: Failed to execute 'setStart' on 'Range': There is no child at offset 12.
at Error (native)
at HTMLInputElement.<anonymous> (http://run.jsbin.io/runner:15:13)
at HTMLDocument.oa (http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js:18:373)
at HTMLDocument.c.event.handle (http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js:55:307)
at HTMLDocument.j.handle.o (http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js:49:363)"
的第一次按下按鈕後,代表WYSIWYG編輯器的內容的文本字段包含以下內容:
Some text he<span style="font-weight: bold;">re for y</span>ou to bold
在測試時(通過輸出第一個孩子的長度),我的假設是,它只試圖強調第一部分 - 「他的一些文字」。我相信,進一步的測試,包括評論聲明以鼓勵選擇,證實了這一點。事實上,當這個評論出來時,編輯運作良好。
我在谷歌和Stack Exchange上搜索,但部分原因是我爲什麼會發生這種情況的無知,我什麼也找不到。
因此,我的問題是 - 爲什麼會出現這個錯誤,我該怎麼做才能避免它,並達到我以編程方式突出顯示和插入此文本的目標?
你爲什麼要給'range.setStart'和'range.setEnd'實數值補償? – mattsven
只需手動突出顯示由這些值所包圍的部分即可。僅用於實驗/學習的原因。 – MemoNick