在Google Docs文件中获取ListItem的父级

时间:2018-06-17 17:17:16

标签: google-apps-script google-docs

我正在尝试在Google文档中获取ListItem的父ListItemgetParent()函数获取整个列表的父元素(例如正文),而不是父列表项。 如果我有:

  • 父列表项
    • 列表项

对于“List item”元素,我希望返回的父元素是“Parent list item”元素。 “父列表项”的父级将为空。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

正如您所注意到的那样,没有任何方法能够满足您的需求。因此,您只需要使用提供的功能将某些内容放在一起。

这里快速尝试实现一个函数,给定一个列表项返回父列表项(如果找到)。否则,如果找不到父列表项(即只包含多个缩进项的列表)或者它已经位于顶部缩进级别,则返回null

function getParentListItem(listItem) {
  if (listItem.getType() != DocumentApp.ElementType.LIST_ITEM) {
    return null;
  }
  var currentNestingLevel = listItem.getNestingLevel();
  if (currentNestingLevel == 0) {
    return null;
  }
  var sibling = listItem.getPreviousSibling();
  while (sibling) {
    var siblingNestedLevel = sibling.getNestingLevel();
    if (siblingNestedLevel < currentNestingLevel) {
      return sibling;
    }
    sibling = sibling.getPreviousSibling();
  }
  return null;
}

我使用包含此内容的文档进行了测试:

Not a list.
- Item 1
- Item 2
   - Nested Item 1
   - Nested Item 2
      - Double Nested Item 1
- Item 3
Not a list.
- List 2 Item 1
   - List 2 Nested Item 1

使用此功能:

function test_getParentListItem() {
  var body = DocumentApp.getActiveDocument().getBody();
  for (var i = 0; i < body.getNumChildren(); i++) { 
    var child = body.getChild(i);
    if (child.getType() != DocumentApp.ElementType.LIST_ITEM) {
      Logger.log("Not a list item.");
      continue;
    }
    Logger.log("Looking up parent list item for: " + child.getText());
    var parentItem = getParentListItem(child);
    if (parentItem != null) {
      Logger.log("Parent list item: " + parentItem.getText());
    } else {
      Logger.log("No parent item found."); 
    }
  }
}

导致此日志输出:

[18-06-17 16:59:15:513 PDT] Not a list item
[18-06-17 16:59:15:515 PDT] Looking up parent list item for: Item 1
[18-06-17 16:59:15:516 PDT] No parent item found.
[18-06-17 16:59:15:518 PDT] Looking up parent list item for: Item 2
[18-06-17 16:59:15:519 PDT] No parent item found.
[18-06-17 16:59:15:524 PDT] Looking up parent list item for: Nested Item 1
[18-06-17 16:59:15:527 PDT] Parent list item: Item 2
[18-06-17 16:59:15:528 PDT] Looking up parent list item for: Nested Item 2
[18-06-17 16:59:15:531 PDT] Parent list item: Item 2
[18-06-17 16:59:15:533 PDT] Looking up parent list item for: Double Nested Item 1
[18-06-17 16:59:15:536 PDT] Parent list item: Nested Item 2
[18-06-17 16:59:15:538 PDT] Looking up parent list item for: Item 3
[18-06-17 16:59:15:539 PDT] No parent item found.
[18-06-17 16:59:15:541 PDT] Not a list item
[18-06-17 16:59:15:543 PDT] Looking up parent list item for: List 2 Item 1
[18-06-17 16:59:15:544 PDT] No parent item found.
[18-06-17 16:59:15:546 PDT] Looking up parent list item for: List 2 Nested Item 1
[18-06-17 16:59:15:549 PDT] Parent list item: List 2 Item 1