2016-05-29 110 views
4

我想创建一个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后,我调试一步一步:第一线做出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插件框架,它返回如上几乎相同的结果。

+0

有几个问题: 1.您的意思是“焦点位置”是什么意思?这与用户的选择有何不同? 2.它看起来像是一个ID为“myTextArea”的DOM对象:你能澄清那是什么吗? –

+0

1.当没有选择时,用户仍然可以点击textarea并放置焦点,我想获得它的位置。 2)“myTextArea”只是一个'ms-TextField'(如果他们提供getter和setter,我可以使用其他类的textarea)。 – SoftTimur

回答

1

使用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函数。

0

用于Office的JavaScript API的一个关键特性是它们遵循异步模型(上面为showSelection()所写的代码似乎是同步的)。我建议您阅读Excel和 JS API概述页面,以了解它们的工作原理。作为一个例子,这里是如何你会从选区中获取文本:

Word.run(function (context) { 
    var myRange = context.document.getSelection(); 
    context.load(myRange, 'text'); 
    return context.sync().then(function() { 
     log("Selection contents: " + myRange.text); 
    }); 
}) 

那么对于你的问题,请澄清在我的评论要求的其他具体。谢谢!

- 迈克尔(PM为Office插件)

+0

谢谢你......我应该澄清它主要是用于Excel,textarea是Excel加载项的一部分。我试过'document.getElementById(“myTextarea”)。getSelection();'它说'getSelection不是一个函数'... – SoftTimur

+0

我明白了。那么,您的问题是否与HTML/JS和Excel之间的交互有关?还是仅仅关于任务窗格中的HTML/JS网页? –

+0

它只是关于在任务窗格中进入的HTML/JS Excel加载项...对不起,它在开始时不清楚... – SoftTimur

1

如果需要的选择就是在HTML页面中选择文本(而不是用户在Excel/Word中选择),然后有一些好的stackoverflow answers about accessing that selection

+1

我很困惑这些答案...似乎解决方案是不同的从一个资源管理器到另一个...我已经尝试了一些(如OP),但不是全部...也许我应该尝试JQuery解决方案,因为默认情况下,Excel加载项使用JQuery? – SoftTimur

+0

它看起来有一致的方法来访问所有浏览器中的HTML文本选择(这是你的意思是“资源管理器”?)。例如,window.getSelection()API似乎在任何地方都受支持。 –

+0

是的,我的意思是“浏览器”......如果'window.getSelection()'适用于所有浏览器,那将会很棒。我只是尝试过,它不能工作的财产...你可以看看我更新的OP? – SoftTimur

相关问题