Javascript 获取所选节点Id
我正在开发一个Firefox扩展,用户在其中选择一个文本,然后该文本进入REST Web服务并返回一些结果 我的文本选择问题,我使用此方法获取所选文本:Javascript 获取所选节点Id,javascript,jquery,firefox,firefox-addon,Javascript,Jquery,Firefox,Firefox Addon,我正在开发一个Firefox扩展,用户在其中选择一个文本,然后该文本进入REST Web服务并返回一些结果 我的文本选择问题,我使用此方法获取所选文本: var selectedText = window.getSelection(); 我在selectedText变量中获得了结果并将其发送到服务器,但我不知道如何获取此节点的Id或任何东西来将结果附加到其中 我用Firebug在javascript和jQuery以及很多Google搜索查询中进行了尝试,但没有得到有用的结果 编辑:由于FF扩展
var selectedText = window.getSelection();
我在selectedText变量中获得了结果并将其发送到服务器,但我不知道如何获取此节点的Id或任何东西来将结果附加到其中
我用Firebug在javascript和jQuery以及很多Google搜索查询中进行了尝试,但没有得到有用的结果 编辑:由于FF扩展需要此功能,您可以跳过IE的所有功能,您需要做的一切是:
window.getSelection().getRangeAt(0).commonAncestorContainer
有关范围的详细信息:
已经有一个类似的问题: 我稍微修改了一些函数:
<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>
函数getTextSelection(){
if(文档选择)
返回文件。选择;
else if(window.getSelection)
返回window.getSelection();
else if(document.getSelection)
return document.getSelection();
其他的
返回false;
}
函数getSelectionRange(){
var selection=getTextSelection();
if(selection.getRangeAt)
返回选择。getRangeAt(0);
else if(selection.createRange)
返回selection.createRange();
其他的
返回false;
}
函数getSelectionParent(r){
if(r.parentElement)
返回r.parentElement;
else if(r.commonAncestorContainer)
返回r.commonAncestorContainer;
其他的
返回false;
}
HTML:
这只是一些随机文本选择我,然后单击按钮强>
我在IE6、7和FF3.0中测试了这些东西。工作没有任何问题。您必须注意的唯一一件事是,IE与FF不同,它忽略文本节点
如果你想自己尝试一下:使用这个
<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>
函数getTextSelection(){
if(文档选择)
返回文件。选择;
else if(window.getSelection)
返回window.getSelection();
else if(document.getSelection)
return document.getSelection();
其他的
返回false;
}
函数getSelectionRange(){
var selection=getTextSelection();
if(selection.getRangeAt)
返回选择。getRangeAt(0);
else if(selection.createRange)
返回selection.createRange();
其他的
返回false;
}
函数getSelectionParent(r){
if(r.parentElement)
返回r.parentElement;
else if(r.commonAncestorContainer)
返回r.commonAncestorContainer;
其他的
返回false;
}
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>
这只是一些随机文本选择我,然后单击按钮强>
我读过了,它只是给你选择的文本而不是节点,我错了吗?最后一个代码示例得到了文本选择的父节点。我把它添加到了我的答案中。谢谢,但它也不起作用:(即使在演示链接中,它也没有给你对象或元素你使用的浏览器是什么?我用IE和FF尝试了一下,它起了作用。getSelectionParent(getSelectionRange())返回一个元素节点。
<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>