当前位置: 首页 > 面试题库 >

如何突出显示DOM Range对象的文本?

时修贤
2023-03-14
问题内容

我使用鼠标在html页面(在firefox中打开)上选择一些文本,并使用javascript函数创建/获取与所选文本相对应的rangeobject。

 userSelection =window.getSelection(); 
 var rangeObject = getRangeObject(userSelection);

现在我要突出显示rangeobject下的所有文本。

  var span = document.createElement("span");
  rangeObject.surroundContents(span);
  span.style.backgroundColor = "yellow";

好吧,这仅在rangeobject(起点和终点)位于同一textnode时有效,然后突出显示相应的文本。

    <p>In this case,the text selected will be highlighted properly,
       because the selected text lies under a single textnode</p>

但是,如果range对象覆盖多个文本节点,则它不能正常工作,它仅突出显示第一个textnode中的文本,例如

 <p><h3>In this case</h3>, only the text inside the header(h3) 
  will be highlighted, not any text outside the header</p>

我知道如何使rangeobject下的所有文本突出显示,而与range是位于单个节点还是多个节点无关?谢谢....


问题答案:

我建议使用documentTextRangeexecCommand方法,该方法就是为此目的而构建的,但通常在可编辑文档中使用。这是我对类似问题的回答:

以下应该做您想要的。在非IE浏览器中,它会打开designMode,应用背景色,然后再次关闭designMode。

更新

修复了在IE 9中的工作。

更新

function makeEditableAndHighlight(colour) {
    var range, sel = window.getSelection();
    if (sel.rangeCount && sel.getRangeAt) {
        range = sel.getRangeAt(0);
    }
    document.designMode = "on";
    if (range) {
        sel.removeAllRanges();
        sel.addRange(range);
    }
    // Use HiliteColor since some browsers apply BackColor to the whole block
    if (!document.execCommand("HiliteColor", false, colour)) {
        document.execCommand("BackColor", false, colour);
    }
    document.designMode = "off";
}

function highlight(colour) {
    var range;
    if (window.getSelection) {
        // IE9 and non-IE
        try {
            if (!document.execCommand("BackColor", false, colour)) {
                makeEditableAndHighlight(colour);
            }
        } catch (ex) {
            makeEditableAndHighlight(colour)
        }
    } else if (document.selection && document.selection.createRange) {
        // IE <= 8 case
        range = document.selection.createRange();
        range.execCommand("BackColor", false, colour);
    }
}


 类似资料:
  • 问题内容: 有人可以通过可以在网页上突出显示文本的JavaScript函数来帮助我。要求是-仅突出显示一次,而不是像我们在搜索情况下那样突出显示所有出现的文本。 问题答案: 您可以使用jquery 突出显示效果。 但是,如果您对原始javascript代码感兴趣,请看一下我得到的内容。将复制粘贴到HTML中,打开文件,然后单击“突出显示”-这应该突出显示“ fox”一词。在性能方面,我认为这适用于

  • 问题内容: 我可以高亮显示一些文本,使其从一个值开始,然后从另一个值结束,如下所示,但颜色为黄色吗? “” JTextPane 高亮显示 文本“” 谢谢。 问题答案: 通常,有几种可能性,具体取决于您对“突出显示”的真正含义:-) 通过在文档级别更改任意文本部分的样式属性来突出显示,例如 通过textPane级别上的荧光笔突出显示:

  • 问题内容: 对于充当按钮的anchors (例如,“堆栈溢出”页面顶部的“ 问题”,“ 标签”,“ 用户 ”等)或选项卡,是否存在CSS标准方法来禁用突出显示效果(如果用户不小心选择了文本)? 我意识到可以使用JavaScript来完成此操作,并且经过一番搜寻后得出了仅Mozilla -moz-user-select选项。 是否有使用CSS来实现此目标的符合标准的方法,如果没有,“最佳实践”方法是

  • 问题内容: 这更多是一个假设性的问题,我正在为正在计划的项目集思广益,并且很好奇是否有人知道任何API或方法可以在任何窗口上立即获取突出显示的文本,例如从浏览器或文字处理器。它还可能有一个只有在按下时才能读取的键盘命令(类似于CTRL + C,将所选文本添加到剪贴板) 我们将非常感谢您对此有什么API的任何了解。 问题答案: 您可以使用JNA 在前台窗口上实际模拟(复制操作),然后读取剪贴板中的内

  • 我正在尝试在嵌套查询的命中时返回突出显示。根据文档,这是可能的。文档说: 父/子和嵌套特性允许返回在不同范围内匹配的文档。在嵌套的情况下,基于嵌套内部对象中的匹配返回文档。内部命中功能在搜索响应中为每个搜索命中返回导致搜索命中在不同范围内匹配的附加嵌套命中。通过在嵌套、has_child或has_parent查询和筛选器上定义inner_hits定义,可以使用内部命中。Inner hits还支持以

  • 我正在使用 django 模板生成 JSON 文件,如下所示: 如何为JSON文件添加django模板支持以启用自动完成?