我正在开发一个Firefox扩展程序,用户选择一个文本,然后该文本转到REST Web服务并返回一些结果。
我的文本选择问题,我已经使用这种方法来获取所选文本:
var selectedText = window.getSelection();
我在selectedText变量中得到了结果并将其发送到服务器,但我不知道如何获取此节点的Id或任何将结果附加到其中的内容。
我在使用Firebug和大量Google搜索查询的javascript和jQuery中尝试过它,但没有有用的结果!
答案 0 :(得分: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中测试过这个东西。工作没有任何问题。你必须要注意的唯一的事情是IE不像FF忽略文本节点。
如果你想亲自尝试一下:http://dev.freedig.org/files/selection.html
答案 1 :(得分: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>