Javascript 检查所选内容是否包含链接

Javascript 检查所选内容是否包含链接,javascript,html,hyperlink,execcommand,Javascript,Html,Hyperlink,Execcommand,我正在创建一个富文本编辑器,我想使用相同的按钮链接和取消链接选择 document.execCommand('createLink'…)和document.execCommand('unlink'…)允许用户链接和取消链接window.getSelection().toString() 但是,没有内置的方法来确定选择是否链接,因此我的问题是:如何检查选择是否链接? 我尝试过使用document.queryCommandState('createLink')和document.queryComma

我正在创建一个富文本编辑器,我想使用相同的按钮链接和取消链接选择

document.execCommand('createLink'…)
document.execCommand('unlink'…)
允许用户链接和取消链接
window.getSelection().toString()

但是,没有内置的方法来确定选择是否链接,因此我的问题是:如何检查选择是否链接?


我尝试过使用
document.queryCommandState('createLink')
document.queryCommandState('unlink')
,但这两个查询总是返回
false
,即使
document.queryCommandState('bold')
工作正常。

我发现了下面的一段代码,目前效果还不错,因此:

const isLink = () => {
  if (window.getSelection().toString !== '') {
    const selection = window.getSelection().getRangeAt(0)
    if (selection) {
      if (selection.startContainer.parentNode.tagName === 'A'
      || selection.endContainer.parentNode.tagName === 'A') {
        return [true, selection]
      } else { return false }
    } else { return false }
  }
}

您需要检查
anchorNode
focusNode
文本节点,查看它们是否为
a
元素。更多详情

函数isLink(){
const selection=window.getSelection()
const startA=selection.anchorNode.parentNode.tagName=='A'
const endA=selection.focusNode.parentNode.tagName=='A'
返回开始| |结束

}
您还可以检索链接HTML元素并将其传递给


您正在使用jQuery吗?还是香草味?@Alvarontoro vanillaJS@AlvaroMontoro嗯,我想到了一种方法。我可以缓存所选内容,然后在文本体中搜索锚定标记并修改它way@AlvaroMontoro即使这样做,你也会遇到同样的问题,如果你想从头开始制作一个富文本编辑器,也就是说:如果有任何重复的单词或字母组合或其他——你怎么知道你在修改正确的组合?@Alvarontoro所以,我找到了一段代码,它工作得很好。我仍然不完全理解范围。我在摆弄range方法,显然它会计算HTML中的空白,如果一个字符紧跟在空格后面,它会将range计数重置为
0
。无论如何,当你有机会的时候,看看代码,让我知道你的想法
const linkHtmlElement = document.getElementById('yourId');
// should return true if your linkHtmlElement is selected
window.getSelection().containsNode(linkHtmlElement)