Javascript 获取所选节点Id

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

我正在开发一个Firefox扩展,用户在其中选择一个文本,然后该文本进入REST Web服务并返回一些结果

我的文本选择问题,我使用此方法获取所选文本:

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>