2015-09-22 2 views
1

Я не нашел способ получить список закладок, отсортированных по их абсолютной позиции в документе.Закажите google docs Закладки по их абсолютной позиции в документе

var doc = DocumentApp.getActiveDocument(); 
var bookmarksList = doc.getBookmarks(); 

bookmarksList не упорядочен положением.

Для того, чтобы сделать это, я полагаю, я могу написать что-то:

var bookmarksList = doc.getBookmarks().sort(sortBookmarkByPosition); 

так, используя пользовательскую функцию сортировки

function sortBookmarkByPosition(a,b){ 
    return what_to_return_here; 
} 

Проблема заключается в том, что Position.getOffset() «Возвращает это позиция родственница местоположение внутри элемента, который содержит его ».

Есть ли решение получить заказ закладок по их абсолютной позиции в документе?

ответ

0

Я нашел возможное решение. Это не так хорошо для производительности, но, похоже, это работает.

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

После есть мое решение:

function sortBookmarkByPosition(a,b){ 

    var body = DocumentApp.getActiveDocument().getBody(); 
    bodyElem = body.getChild(0); 

    aElem = a.getPosition().getElement(); 
    bElem = b.getPosition().getElement(); 

    // a 
    var rangeBuilder = DocumentApp.getActiveDocument().newRange(); 
    rangeBuilder.addElementsBetween(bodyElem, aElem); 
    var aCount = rangeBuilder.getRangeElements().length; 

    // b 
    rangeBuilder = DocumentApp.getActiveDocument().newRange(); 
    rangeBuilder.addElementsBetween(bodyElem, bElem); 
    var bCount = rangeBuilder.getRangeElements().length; 

    return aCount - bCount; 
} 

Прокомментируйте, если вы видите какие-то ошибки. Лучшие решения действительно приветствуются :-).

Смежные вопросы