我想创建一个文本区域,用户可以在其中选择文本的一部分,我将根据他们的选择做出反应。所以我需要
1)获取选择文本的开始和结束位置
2)获取焦点的位置(如果它在文本区域中并且没有选择)
似乎执行此操作的功能因浏览器而异。有人可以告诉我在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)将焦点设置在文本区域的某个位置
编辑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.
似乎选择未成功捕获...
这是没有Excel加载项框架的JSBin,它返回的结果几乎与上述相同。
使用JQuery。
例如,以下两行获得插入符号的位置:
function showselection() {
console.log($('#myTextarea')[0].selectionStart);
console.log($('#myTextarea')[0].selectionEnd);
}
有一些插件:
https://github.com/localhost/jquery-fieldselection
http://madapaja.github.io/jquery.selection/
第二个有几个带有按钮的简短示例(我们可能会丢失选择)。您可以使用他们的API,也可以查看他们的代码以查看他们调用了哪些JQuery函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句