我正在使用 word JavaScript api 开发一个 word 插件。我想获取当前选择的内容控件。我已插入如下内容控件并且它正在工作:
var range = context.document.getSelection();
var myContentControl = range.insertContentControl();
如何从范围对象中获取内容控件?
请指教。
我正在使用 word JavaScript api 开发一个 word 插件。我想获取当前选择的内容控件。我已插入如下内容控件并且它正在工作:
var range = context.document.getSelection();
var myContentControl = range.insertContentControl();
如何从范围对象中获取内容控件?
请指教。
你试过 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);
}
})
});
在我的原始答案中添加更多细节。
我之前的代码示例返回所选内容中的所有内容控件,似乎需要的是所选段落中的内容控件。这可以是部分选定的段落(即只是插入点)或展开多个段落。这是一个更“复杂”的场景,因为这需要使用 Promise 模式遍历集合中的集合。这是有关如何实现此目的的代码示例,希望对您有所帮助。
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;
}
});
以下是工作代码:
var range=context.document.getSelection().paragraphs;
context.load(range, 'text');
return context.sync()
.then(function () {
for (var i = 0; i < range.items.length; i++) {
context.load(range.items[i].contentControls, 'text,tag');
}
})
.then(context.sync)
.then(function () {
for (var i = 0; i < range.items.length; i++) {
for (var j = 0; j < range.items[i].contentControls.items.length; i++) {
console.log("<br/>Content Control:" + (j + 1) + ":" + range.items[i].contentControls.items[j].text);
}
}
});