2010-12-18 20 views
3

該函數返回用戶選擇的文本並將其包裝在標記中,在本例中爲粗體標記。DOM操作後的Javascript:返回選擇(突出顯示的文本)

function makeBold() { 
    var selection = window.getSelection(); 
    var range = selection.getRangeAt(0); 
    var newNode = document.createElement("b"); 
    range.surroundContents(newNode); 
} 



現在經過我調用該函數,選擇(高亮文本)將被刪除。如何返回該選擇,或者如何在不失去我的選擇的前提下調用該功能?

+0

適用於Chrome/Firefox。你正在使用哪種瀏覽器? – SuperSaiyan 2010-12-18 09:55:13

+0

@Thrustmaster:我沒有說它不起作用,它的確如此,但是文字已經被選中了 – Zebra 2010-12-18 10:04:25

回答

6

下面的工作:

function makeBold() { 
    var selection = window.getSelection(); 
    if (selection.rangeCount) { 
     var range = selection.getRangeAt(0).cloneRange(); 
     var newNode = document.createElement("b"); 
     range.surroundContents(newNode); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
} 

然而,有幾個問題需要注意的:

  • 範圍的surroundContents()方法並不適用於所有的工作範圍:它具有內的意義DOM在新節點內圍繞範圍內容。例如,使用surroundContents()跨越兩個段落但未完全選擇的範圍會拋出錯誤。有關此的正式定義,請參見DOM Level 2 Range spec
  • IE版本高達幷包括版本8不支持DOM範圍,並且與其他瀏覽器有完全不同的Selection對象。 IE 9將具有與其他瀏覽器類似的範圍和選擇功能。
  • 在繼續操作之前,您需要檢查所選物品的rangeCount屬性,否則如果沒有選擇,則會收到異常。
+0

哇!感謝你的功能和評論。這非常有幫助。 – Zebra 2010-12-18 12:23:39

相關問題