2009-06-09 255 views
2

我正在開發一個Firefox擴展,用戶選擇一個文本,然後文本轉到REST Web服務並返回一些結果。獲取所選節點ID

我與文本選擇的問題,我用這個方法來獲取所選文本:

var selectedText = window.getSelection(); 

我得到的結果selectedText變量,並將其發送到服務器,但我不知道如何獲取此節點的Id或任何內容以將結果附加到其中。

我嘗試過在JavaScript和jQuery中使用Firebug和大量的Google搜索查詢,但沒有有用的結果!

回答

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會忽略文本節點。

如果你想嘗試一下自己:http://dev.freedig.org/files/selection.html

+0

我讀它,它只是給你選定的文本不是節點,我錯了嗎? – 2009-06-10 05:38:39

0

使用本

<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>