【问题标题】:Simulate cut function with JavaScript?用 JavaScript 模拟剪切功能?
【发布时间】:2019-04-08 20:05:29
【问题描述】:

我正在开发一个 chrome 扩展程序,我想对页面上选择的(由用户突出显示的)文本做一些事情。为此,我需要一种方法来删除选定的文本,例如输入字段中的文本。

我找到了一种“清除”选定文本的方法,这意味着它将被取消选中: Clear Text Selection with JavaScript 但它似乎不是我要找的。​​p>

这只是从文本中删除突出显示:

window.getSelection().empty();

如果是可编辑的文本,我想删除选中的文本。这可以用 JavaScript 实现吗?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以使用deleteFromDocument 方法:

    window.getSelection().deleteFromDocument()
    

    这将立即从文档中删除选定的内容,因此也会清除选择。

    正如MDN web docs中正式描述的那样:

    Selection 接口的 deleteFromDocument() 方法从文档的 DOM 中删除选定的文本。


    如果您希望能够从 input 元素中删除文本,则需要使用不同的 API:

    var activeEl = document.activeElement;
    var text = activeEl.value;
    
    activeEl.value = text.slice(0, activeEl.selectionStart) + text.slice(activeEl.selectionEnd);
    

    由我编辑,Synn Ko:要覆盖输入字段、文本区域和 contenteditables,请使用:

    var selection = window.getSelection();
    var actElem = document.activeElement;
    var actTagName = actElem.tagName;
    
    if(actTagName == "DIV") {
        var isContentEditable = actElem.getAttribute("contenteditable"); // true or false
        if(isContentEditable) {
            selection.deleteFromDocument();
        }
    }
    
    if (actTagName == "INPUT" || actTagName == "TEXTAREA") {
        var actText = actElem.value;
    
        actElem.value = actText.slice(0, actElem.selectionStart) + actText.slice(actElem.selectionEnd);
    }
    

    【讨论】:

    • 我刚刚意识到你甚至可以使用这个不可编辑的功能剪切文本......有什么方法可以限制这个功能的“力量”?不是交易破坏者或任何东西,但我真的不需要用户能够从页面中删除任何文本,只是通常可以使用 CTRL + X 删除的文本。
    • @SynnKo 我已经用一些应该启用此功能的代码更新了我的答案。试一试,让我知道你的进展如何!
    • 这似乎不起作用。我在此页面的控制台中尝试了它,使用评论文本区域或顶部的搜索字段,但似乎都不起作用,即使我删除了 parentElement (因为它给了我 DIV 或 FORM 而不是预期的 INPUT 和 TEXTAREA ),并添加另一个元素来检查 if 也不起作用。不知道我做错了什么。
    • @SynnKo 啊,我的错误,抱歉。我不知道getSelection 实际上无法在input 中进行选择。试试我的答案中修改后的代码。
    • 非常感谢您到目前为止的帮助 - 您的新解决方案确实适用于输入字段,但不幸的是它不适用于 contenteditables(我用 Google Keep 尝试过)。看来我需要结合使用您的旧解决方案和新解决方案才能保持一致,所以我现在正在努力。
    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2011-03-29
    • 2020-06-19
    相关资源
    最近更新 更多