从 tech.io 代码部分获取选定的文本

Posted

技术标签:

【中文标题】从 tech.io 代码部分获取选定的文本【英文标题】:Get selected text from tech.io code section 【发布时间】:2018-05-14 21:31:20 【问题描述】:

我正在编写一个 chrome 扩展程序,我想在 tech.io 的代码部分中选取选定的文本,例如:https://prnt.sc/hhfkwuhttps://tech.io/playgrounds/347/javascript-promises-mastering-the-asynchronous/what-is-asynchronous-in-javascript

我有这个功能在任何其他网站上几乎都可以使用,但在这里无法正常工作,它返回空字符串或一些奇怪的 unicode 字符:

function getSelectedText() 
var text = "";
var activeEl = document.activeElement;
var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
if (
    (activeElTagName == "textarea") || (activeElTagName == "input" &&
        /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
    (typeof activeEl.selectionStart == "number")
) 
    text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
 else if (window.getSelection) 
    text = window.getSelection().toString();

    return text;

我应该如何更改它才能在 tech.io 网站上的这个特定代码部分工作?

【问题讨论】:

【参考方案1】:

问题在于 Ace 编辑器。虽然它看起来像是您在该框中选择文本,但实际上是在绘制看起来像选择的框,以便正确格式化下面的颜色。

window.getSelection 不会产生任何结果,因为实际上不存在任何选择。

您可能需要检查 document.activeElement 以查看它是否是 ace 编辑器,然后使用来自 this answer 的解决方案:

最好改用 editor.getSelectedText()。

【讨论】:

感谢您的反馈,但我如何获得对编辑器的参考?我假设我必须将 ace.js 作为内容脚本加载,但接下来呢? 好的,我使用此代码editor = ace.edit(aceEditorElement); 获得了editor 的引用,之后我能够获得选定的文本,但是它弄乱了编辑器的布局,看起来现在像这样:prnt.sc/hhg7m6 编辑您的原始问题,并发布更新的答案,我们可以进一步协助@kecman

以上是关于从 tech.io 代码部分获取选定的文本的主要内容,如果未能解决你的问题,请参考以下文章

我需要 VBA 帮助以从部分选定文本中查找完整文件名

从 Vim 保存选定的文本(部分行)

用于获取组合框的选定文本的 PHP 代码

从 Word 中的选定文本中提取超链接

如何从 daterangepicker 中获取选定的值?

如何从android中的edittext中获取选定的文本?