我正在使用单词javaScript api开发一个单词加载项。我想获得当前选择的内容控件。我已经插入了如下所示的内容控件及其工作原理:
var range = context.document.getSelection(); var myContentControl = range.insertContentControl();
如何从范围对象获取内容控件,请提供建议。
答案 0 :(得分:0)
你试过context.document.getSelection()。contentControls; ?
记得加载内容控件集合,这里有一些示例代码....
Word.run(function(context) {
var myCCs = context.document.getSelection().contentControls;
context.load(myCCs);
return context.sync()
.then(function(){
for(var i=0; i< myCCs.items.length; i++){
// here you will get the full content of content controls within the selection,
console.log("this is full paragraph:" + (i + 1) + ":" + myCCs.items[i].text);
}
})
});
在原始答案中添加更多详细信息。
我之前的代码示例返回选择内的所有内容控件,似乎需要的是所选段落中的内容控件。这可以是部分选择的段落(即仅插入点)或扩展多个段落。这是一个更“复杂”的场景,因为这需要使用promises模式遍历集合中的集合。以下是关于如何实现这一希望的代码示例。
Word.run(function(context) {
//first we get the paragraphs on the selection.
var myPars = context.document.getSelection().paragraphs;
context.load(myPars); //note you need not to incldue scalar properties like title or tags, all scalars are included.
return context.sync()
.then(function(){
// we have the paragraphs, now lets get the content controls for each paragraph (will only be one paragraph if the cursor is in any paragraph only)
forEach(myPars,function(item, i){
var myCCs = myPars.items[i].contentControls;
context.load(myCCs);
return context.sync()
.then(function(){
for (var j=0;j<myCCs.items.length;j++){
// here i am accessing each content control.
console.log(myCCs.items[j].text);
}
})
})
})
function forEach(collection, handler) {
var promise = new OfficeExtension.Promise(function (resolve) { resolve(); });
collection.items.forEach(function (item, index) {
promise = promise.then(function () {
return handler(item, index);
})
});
return promise;
}
});