如何检查文本是否突出显示(跨浏览器)

时间:2014-06-20 15:59:26

标签: javascript jquery regex

是否有一种通用的方式在jQuery或JavaScript(大多数跨浏览器兼容)中检查文本是否已突出显示?

我正在使用HTML <input type='text'>元素。这是一个搜索框,在搜索项目时允许使用特定格式。

用户可以输入以下内容:

  1. 项目名称,位置,说明和其他字母数字输入
  2. 项目编号(全数字)
  3. keydown 我正在过滤各种搜索格式。按照目前的情况,如果输入了10个字符,并且它们都是数字,input文本框只允许输入更多字符,如果它们是非数字。原因是,我们的项目编号长度为10位,如果用户正在搜索项目编号,我们只想捕获前10个字符而忽略其余字符。

    我的目标是允许用户按项目编号查找项目,突出显示他们刚输入的文本,然后按项目编号搜索另一个项目(替换现有的搜索文本)。但是,因为我们正在过滤非数字输入,所以不会捕获数字。

    以下是我对非数字进行过滤的方法:

    if ($input.val().length == 10 && !isNaN($input.val().replace(' ', '#'))) {
      if ((e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105)) {
        return false;
      }
    }
    

    如何修改此项以确保如果我的文字突出显示input将允许数字输入替换现有查询?

2 个答案:

答案 0 :(得分:8)

您可以使用Selection对象:

var selection = window.getSelection();

请参阅此处的文档:https://developer.mozilla.org/fr/docs/DOM/selection

使用此对象,您可以检查选定的dom节点(anchorNode)。例如:

if ($(window.getSelection().anchorNode).attr('id') === 'something') { ... }

答案 1 :(得分:0)

基于以上答案,这是原始版本。

document.addEventListener('click', function(){
    if (window.getSelection().anchorNode.parentElement.classList.contains('word')) {
    console.log('highlight');
    }
});

我会将“文档”更改为包装容器,并将“单词”更改为要在其上检测到突出显示的文本上的任何类/ ID。