2009-06-09 13 views
2

私はFirefoxの拡張機能を開発しています。ユーザーがテキストを選択すると、そのテキストはREST Webサービスに送られ、結果が返されます。選択ノードID

テキスト選択と私の問題は、私が選択したテキストを取得するために、このメソッドを使用しました:

var selectedText = window.getSelection(); 

私はselectedText変数に結果を得ましたが、サーバーに送信しますが、私は方法がわかりませんこのノードのIDなどを取得して結果を追加します。

Firebugと多くのGoogle検索クエリでjavascriptとjQueryの両方で試しましたが、有用な結果はありませんでした。

答えて

2

編集:あなたはFFの拡張のためにこれを必要とするので、あなたは、IEのためのすべての機能を省略することができますし、あなたがする必要があるすべてのものはこれです:範囲について

window.getSelection().getRangeAt(0).commonAncestorContainer 

詳細情報:https://developer.mozilla.org/en/DOM/range


すでに同様の質問があります。

Get selected text and selected nodes on a page?

私は機能を少し修正:

<script type="text/javascript"> 
    function getTextSelection() { 
    if(document.selection) 
     return document.selection; 
    else if(window.getSelection) 
     return window.getSelection(); 
    else if(document.getSelection) 
     return document.getSelection(); 
    else 
     return false; 
    } 
    function getSelectionRange() { 
    var selection = getTextSelection(); 
    if(selection.getRangeAt) 
     return selection.getRangeAt(0); 
    else if (selection.createRange) 
     return selection.createRange(); 
    else 
     return false; 
    } 
    function getSelectionParent(r) { 
    if(r.parentElement) 
     return r.parentElement; 
    else if(r.commonAncestorContainer) 
     return r.commonAncestorContainer; 
    else 
     return false; 
    } 
</script> 

HTML:

<body> 
    <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p> 
    <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p> 
</body> 

私はIE6,7とFF3.0でこのようなものをテストしました。何の問題もなく働いた。あなたが知っておかなければならないのは、FFと違ってIEはテキストノードを無視するということだけです。

あなたはそれを自分で試してみたい場合:THIS

<script type="text/javascript"> 
    function getTextSelection() { 
    if(document.selection) 
     return document.selection; 
    else if(window.getSelection) 
     return window.getSelection(); 
    else if(document.getSelection) 
     return document.getSelection(); 
    else 
     return false; 
    } 
    function getSelectionRange() { 
    var selection = getTextSelection(); 
    if(selection.getRangeAt) 
     return selection.getRangeAt(0); 
    else if (selection.createRange) 
     return selection.createRange(); 
    else 
     return false; 
    } 
    function getSelectionParent(r) { 
    if(r.parentElement) 
     return r.parentElement; 
    else if(r.commonAncestorContainer) 
     return r.commonAncestorContainer; 
    else 
     return false; 
    } 
</script> 

HTML http://dev.freedig.org/files/selection.html

+0

私はそれを読んで、それだけであなたの選択したテキストを提供しますノードではない、私は間違っていますか? –

+0

最後のコード例は、テキスト選択の親ノードを取得します。私はそれを私の答えに加えました。 – slosd

+0

ありがとうございますが、どちらもうまくいきません:(デモリンクでもオブジェクトや要素が表示されません) –

0

使用します。

<body> 
    <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p> 
    <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p> 
</body>