【发布时间】:2016-05-29 20:31:55
【问题描述】:
我想创建一个文本区域,用户可以在其中选择文本的一部分,我会根据他们的选择做出反应。所以我需要
1) 获取选择文本的开始和结束位置
2) 获取焦点的位置,如果在textarea中且没有选择
似乎执行此操作的功能因浏览器而异。那么谁能告诉我在 Office 加载项中执行此操作的方法是什么?
我尝试了以下2种方式(即选择myTextarea中的一部分文字,点击button,然后调试代码),它们似乎都不是正确的功能。
(function() {
"use strict";
Office.initialize = function(reason) {
$(document).ready(function() {
app.initialize();
$('#button').click(showSelection);
});
};
function showSelection() {
// way 1
console.log(document.selection); // undefined
document.getElementById("myTextarea").focus();
var sel = document.selection.createRange(); // Uncaught TypeError: Cannot read property 'createRange' of undefined
selectedText = sel.text;
// way 2
console.log(document.getElementById("myTextarea").selectionstart); // undefined
console.log(document.getElementById("myTextarea").selectionend); // undefined
}
})();
另外,如果有人能告诉我如何通过代码实现以下内容,那就太好了:
1) 从开始和结束位置选择文本的一部分
2) 将焦点设置在textarea的某个位置
编辑 1:
我刚刚在我的 Excel 加载项中尝试了window.getSelection():
function showselection() {
var a = window.getSelection();
var b = window.getSelection().toString();
var c = window.getSelection().getRangeAt(0);
}
在textarea中选中一段文字,点击button,一步步调试:第一行做成aa = Selection {anchorNode: null, anchorOffset: 0, focusNode: null, focusOffset: 0, is ...;第二行返回"",第三行报错Home.js:19 Uncaught IndexSizeError: Failed to execute 'getRangeAt' on 'Selection': 0 is not a valid index. 看来选择没有被成功捕获...
这里是JSBin,没有 Excel 插件框架,它返回的结果与上面几乎相同。
【问题讨论】:
-
几个问题: 1. “焦点位置”是什么意思?这与用户的选择有何不同? 2. 似乎有一个 ID 为“myTextArea”的 DOM 对象:你能澄清一下这是什么吗?
-
1.当没有选择时,用户仍然可以点击文本区域并放置焦点,我想得到它的位置。 2)“myTextArea”只是一个
ms-TextField(如果它们提供getter和setter,我可以使用其他类的textarea)。