2009-08-14 55 views
0

我有以下功能,應該爲網頁上的用戶選定區域獲取HTML。這個功能似乎不能正常工作。xul-Get選擇html

有時候,它也會得到未被選中的htmls。

任何人都可以請看看這個功能嗎? - 非常感謝。

// ---------------------------- Get Selected HTML ------------- -----------

功能getSelectionHTML(){

if (window.getSelection) 
{ 
    var focusedWindow = document.commandDispatcher.focusedWindow; 
    var sel = focusedWindow.getSelection(); 
    var html = ""; 
    var r = sel.getRangeAt(0); 
    var parent_element = r.commonAncestorContainer;   
    var prev_html = parent_element.innerHTML; 
    if(prev_html != undefined) 
    { 
     return prev_html; 
    } 
    return sel; 
} 
return null; 

}

回答

2

它看起來對我來說,你得到父元素的內容,而不是選擇本身。如果父元素包含您選擇的內容之外的任何東西,那麼您也會得到它。

var sel = focusedWindow.getSelection(); 

這條線returns a selection object。它包含用戶選擇的確切文本。然後您從選擇中獲得範圍並獲得commonAncestorContainer。所以,如果你有這樣的代碼:

<div id="ancestor"> 
    <p>First sentence.</p> 
    <p>Another sentence.</p> 
</div> 

和你的用戶從第一句的「選擇將第二句的',那麼commonAncestorContainer是div元素,所以你還可以得到文本的其餘部分。

這樣做的一個好的原因是,如果你想保證自己有一個有效的HTML片段(這似乎是這種情況,由你的函數名稱暗示),但是如果你只是想要選擇的文本,然後調用toString方法直接範圍:

var focusedWindow = document.commandDispatcher.focusedWindow; 
var sel = focusedWindow.getSelection(); 
var r = sel.getRangeAt(0); 
return r.toString();