javascript - 获取选定文本的 anchor 名称

标签 javascript html tampermonkey

我正在尝试获取网页上所选文本的附加信息,该网页具有以下 HTML(简体):

    <h2 class="level2"><span>part 1</span> AAAA<a name="p1"> </a></h2>
    <h3><strong>N1 </strong><a name="NameX"> </a>TitelX</h3>
    <p><a name="N1S1"> </a>(1) Text1.</p>
    <p><a name="N1S2"> </a>(2) Text2.</p>
    <p><a name="N1S3"> </a>(3) Text3.</p>
    <p><a name="N1S4"> </a>(4) Text4.</p>
    ...

如果用户选择了一些文本(f.e Text1 或其中的一部分),我需要的是获取(在 Chrome 的 Tampermonkey 中) anchor 上的名称 (f.e N1S1)。

到目前为止,我已经得到了选定的文本(按下按钮后):

    $(document).ready(function() {
        $('body').append('<input type="button" value="Button 1" id="b1">')
        $('#b1').css('position', 'fixed').css('bottom', 0).css('left', 0);
        $('#b1').click(function(){
            var x = document.getSelection()
            alert(x)
        });
    });

我需要找到选择的 anchor 名称。

最佳答案

  • 使用 anchorNodefocusNode 确定选择的开始/结束位置(参见 Selection documentation )
  • 不要忘记处理没有选择和跨越多个节点的选择的情况(如@AuxTaco 的评论)
  • 一旦您有了#text 节点,其中包含“(1) Text1.”;获取 anchor 名称可以像 .parentNode.firstElementChild.name 一样简单 - 随意适应您的需求。

function getLinkName() {
  let sel = window.getSelection();
  if (!sel.anchorNode) {
    return "nothing selected";
  }
  if (sel.anchorNode != sel.focusNode) {
    console.log(sel.anchorNode.tagName, sel.focusNode.tagName);
    return "selection spans multiple nodes";
  }
  
  // this will be the <p> element if the text inside it is selected
  let selectionParent = sel.anchorNode.parentNode;
  
  return selectionParent.firstElementChild.name;
}

function run() {
  alert(getLinkName());
}
<h2 class="level2"><span>part 1</span> AAAA<a name="p1"> </a></h2>
    <h3><strong>N1 </strong><a name="NameX"> </a>TitelX</h3>
    <p><a name="N1S1"> </a>(1) Text1.</p>
    <p><a name="N1S2"> </a>(2) Text2.</p>
    <p><a name="N1S3"> </a>(3) Text3.</p>
    <p><a name="N1S4"> </a>(4) Text4.</p>
    
    <button onclick="run()">Check selection</button>

关于javascript - 获取选定文本的 anchor 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445009/

相关文章:

css - 使用 Greasemonkey 替换 css 文件中的行

javascript - 使用 Greasemonkey(或类似的用户脚本引擎)可以更快地重定向?

html - Divs 高度由内的文本高度决定,我不想要这个

php - 将 MySQL 数据分类为限制大小的页面,并在屏幕上选择更改页面?它是如何完成的?

javascript - Babel 不允许没有 .js 文件扩展名的导入

javascript - 是否对跨浏览器的 native 功能支持进行静态检查?

html - 在不禁用该字段的情况下限制选择 SELECT 选项

javascript - 在 Facebook 的 Greasemonkey/tampermonkey 中使用 JavaScript 删除 CSS 边框

javascript - 获得没有子 child 的 child

javascript - 导入/导出 HTML5 localStorage 数据