Javascript从页面上的任何textinput/textarea获取所选文本

Javascript从页面上的任何textinput/textarea获取所选文本,javascript,bookmarklet,Javascript,Bookmarklet,如果我不知道哪个文本处于活动状态(聚焦),如何从文本框/文本区域获取所选文本。我正在尝试创建一个小书签,用于更正页面上任何类型输入中的所选文本。对于所选内容,您需要selectionStart和selectionEnd 对于当前关注的元素,请使用document.activeElement 因此,作为一个组合,您可以使用: 正如Tim Down指出的,对于Internet Explorer版本8或更低版本,您需要一个更复杂的解决方案: 很抱歉,你能为我澄清一下这个问题吗:你想要当前焦点文本区域/

如果我不知道哪个文本处于活动状态(聚焦),如何从文本框/文本区域获取所选文本。我正在尝试创建一个小书签,用于更正页面上任何类型输入中的所选文本。

对于所选内容,您需要
selectionStart
selectionEnd

对于当前关注的元素,请使用
document.activeElement

因此,作为一个组合,您可以使用:

正如Tim Down指出的,对于Internet Explorer版本8或更低版本,您需要一个更复杂的解决方案:


很抱歉,你能为我澄清一下这个问题吗:你想要当前焦点文本区域/输入字段的内容还是特定字段的内容,而不管当前焦点是什么?我想这是关于文本元素或文本区域值的选定或突出显示的部分。你想什么时候获得选定文本?例如,如果它位于按钮单击或类似操作上,则任何输入或文本区域都不会被聚焦。@FishBasketGordo这是用于bookmarklet的。我将在“快捷方式”工具栏上的文档窗口外单击它。您可能希望在此处添加一些防御代码,这将在您选择实际元素时引发错误(尝试突出显示文本框本身并观察控制台输出)
selectionStart
selectionEnd
在IE<9上不受支持。请参见我的答案,了解解决此问题的跨浏览器功能:好。我们如何不用out使用setInterval,使用event?
function getText(elem) { // only allow input[type=text]/textarea
    if(elem.tagName === "TEXTAREA" ||
       (elem.tagName === "INPUT" && elem.type === "text")) {
        return elem.value.substring(elem.selectionStart,
                                    elem.selectionEnd);
        // or return the return value of Tim Down's selection code here
    }
    return null;
}

setInterval(function() {
    var txt = getText(document.activeElement);
    document.getElementById('div').innerHTML =
        txt === null ? 'no input selected' : txt;
}, 100);