我想创建一个textarea,用户可以在其中选择文本的一部分,然后根据他们的选择做出反应。所以,我需要在文本区域中获取和设置文本选择
1)获取选定的文本
2)获得焦点的位置,如果是在文本区域并没有选择
似乎开始和结束位置这样做的功能是不同的从一个探险家到另一个。那么有谁能告诉我在Office加载项中做什么的方法?
我试过以下两种方法(即选择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:
我只是试图window.getSelection()
我的Excel插件中:
function showselection() {
var a = window.getSelection();
var b = window.getSelection().toString();
var c = window.getSelection().getRangeAt(0);
}
选择在textarea的文本,并点击button
后,我调试一步一步:第一线做出a
a = 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.当没有选择时,用户仍然可以点击textarea并放置焦点,我想获得它的位置。 2)“myTextArea”只是一个'ms-TextField'(如果他们提供getter和setter,我可以使用其他类的textarea)。 – SoftTimur