确定dom元素是否包含突出显示的文本

时间:2017-04-03 18:17:24

标签: javascript jquery

在我的网络应用中,我正在尝试为文本元素的click和mouseup事件实现不同的行为。在mouseup事件中,我检查是否有选定的文本并对其执行某些操作。在点击事件中,我会做其他事情,例如在点击文本的某处导航。但是,如果有选定的文本,我将不会在click事件上执行代码,这是我遇到的部分。这是我现在正在做的模式:

//the function that returns selected text as string
function getSelectionText() {
  var text = "";
  if (window.getSelection) {
    text = window.getSelection().toString();
  } else if (document.selection && document.selection.type != "Control") {
    text = document.selection.createRange().text;
  }
  return text;
}

function onMouseUp(event) {
  var selection = getSelectionText();
  if (selection != "") {
    alert("Selected text: " + selection);
  }

}

function onClick(event) {
  alert("You clicked the text.");
}
<body>
  <h2 onclick="onClick(); return false;" onmouseup="onMouseUp(); return false;">
    text to click or select
  </h2>
</body>

我想在onClick处理程序中执行类似的操作

function onClick(event)
{
  if ( !hasSelectedParts(this) ) // want to implement hasSelectedParts() function
  {
      alert("You clicked the text.");
  }
}

如何实现hasSelectedParts(domElement)函数?那是, 有一种简单的方法可以检测dom元素中是否有一些选定的部分。

1 个答案:

答案 0 :(得分:0)

感谢您在评论中提供任何帮助。以下是我提出的建议:

function hasSelectedContend(element)
{
    var selection = window.getSelection();
    return !selection.isCollapsed // selection data is about currently highlighted text
        && selection.anchorNode !== null // there is a selection
        && selection.anchorNode.parentNode === element; //selection is in the element
}