0

Web ページでユーザーが選択した領域の HTML を取得することになっている次の関数があります。この機能は正しく動作していないようです。

時々、選択されていないhtmlも取得します。

誰でもこの機能を調べてもらえますか? - どうもありがとう。

//----------------------------選択した 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;

}

4

1 に答える 1

2

選択自体ではなく、親要素のコンテンツを取得しているように見えます。親要素に選択したもの以外のものが含まれている場合は、それも取得します。

var sel = focusedWindow.getSelection();

この行は、選択オブジェクトを返します。これには、ユーザーが選択した正確なテキストが含まれています。次に、選択範囲から範囲を取得し、commonAncestorContainerを取得します。したがって、次のようなコードがある場合:

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

また、ユーザーが最初の文の「s」から2番目の文の「s」までを選択すると、commonAncestorContainerがdiv要素になるため、残りのテキストも取得できます。

これの正当な理由は、有効なHTMLフラグメントを保証したい場合(これは、関数名によって示される場合のようです)ですが、選択したテキストだけが必要な場合は、範囲でtoStringメソッドを直接呼び出します。

var focusedWindow = document.commandDispatcher.focusedWindow;
var sel = focusedWindow.getSelection();
var r = sel.getRangeAt(0);
return r.toString();
于 2009-08-27T22:19:16.430 に答える