Как проверить, содержит ли выделенный текст элемент управления содержимым или нет в Word 2016, используя Word Javascript API

Я создал панель задач для Word 2016, в которой есть две кнопки, такие как «добавить управление содержимым» и «получить управление содержимым». Добавление элемента управления содержимым в документ работает нормально. Когда я выбираю текст этого элемента управления содержимым и нажимаю «получить управление содержимым», он возвращает текст. Однако я хочу проверить, содержит ли выделенный текст элемент управления содержимым или обычный текст. Заранее большое спасибо.


person office365developer    schedule 17.04.2016    source источник


Ответы (2)


Я думаю, вы спрашиваете о двух вещах. Если вы выбираете текст элемента управления содержимым и хотите вернуть элемент управления содержимым, вам нужно сделать следующее:

Вы захотите проверить свойство range.parentContentControl, чтобы проверить, находится ли выделенный текст в элементе управления содержимым. Если возвращаемое значение не равно null, вы можете сравнить текстовое значение элемента управления содержимым и текстовое значение выбранного диапазона, чтобы убедиться, что они эквивалентны.

var contentControl = context.document.getSelection().parentContentControl;

Но если вы хотите проверить, содержит ли какой-либо произвольный текст из выделения элемент управления содержимым, вам нужно проверить коллекцию элементов управления содержимым в диапазоне.

var contentControlCollection = context.document.getSelection().contentControlCollection;
person Michael Mainer    schedule 18.04.2016
comment
@mike, спасибо за ответ, но это не работает. Я выбираю весь текст внутри элемента управления контентом, который имеет значения тега и заголовка, но context.document.getSelection().parentContentControl возвращает «неопределенное». В документе есть куча элементов управления содержимым, я хочу узнать, какой текст выделен или нет. - person office365developer; 18.04.2016
comment
Я думаю, что вторая строка должна использовать свойство contentControls, а не contentControlsCollection, которое является типом. Попробуйте это @office365developer - person Miro J.; 19.09.2016

Может быть, это происходит из-за того, что вы не загружаете элемент управления содержимым перед вызовом context.sync()? ... попробуйте этот код, он должен работать (обратите внимание, что мы получаем GeneralException, если в выборе нет элемента управления содержимым). Обратите внимание, что в этом примере предполагается, что если есть элемент управления содержимым, на нем есть заголовок :)

 function insideOfContentControlCheck() {
        Word.run(function (ctx) {
            var myCC = ctx.document.getSelection().parentContentControl;
            ctx.load(myCC); // I think this is the part you are missing!
            return ctx.sync()
            .then(function () {     
                console.log(myCC.title);// if there is a content control we'll show the title

            });


        }).catch(function (e) {
            //there is no ContentControl.
            console.log("Error", e.message);

        });

    }

person Juan Balmori    schedule 19.04.2016