javascript - 获取选定文本的锚点名称
问题描述
我正在尝试获取网页上所选文本的其他信息,该网页具有以下 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>
...
如果用户选择了一些文本(fe Text1 或其一部分),我需要的是(在 Tampermonkey for Chrome 中)锚点上的名称(fe 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)
});
});
我需要找到选择的锚名称。
解决方案
- 使用
anchorNode
andfocusNode
来确定选择的开始/结束位置(请参阅选择文档) - 不要忘记处理跨多个节点的无选择和选择的情况(如@AuxTaco 的评论)
- 一旦你有 #text 节点,包含“(1)Text1。”;获取锚名称可以很容易
.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>
推荐阅读
- angular - Angular 测试 - 如果计时器在组件初始化中,Tick 不起作用
- windows - 一台显示器上有多个 hdmi 输入屏幕
- r - 使用 dplyr 和 group_by 计算一个值的重复次数
- python - 过滤后的 twitter api 流示例
- javascript - 像链接一样滑动
- php - PHP - 替换标签范围内的特定单词
- angular - 在谷歌应用引擎上部署带有环回的 Angular 10 应用
- python - 使用 Django 进行无效的 CSRF 验证
- c# - 我需要使用 Vector3.up、Vector3.down、ecc.将 Vector3 应用于 Vector3[] 但我不能
- ios - Swfit - 检查当前时间是否在两个时间字符串之间