获取 Google Docs 文件中 ListItem 的父项
Get parent of a ListItem in a Google Docs file
我正在尝试获取 Google 文档中 ListItem
的父级 ListItem
。 getParent()
函数获取整个列表的父元素(例如 body),而不是父列表项。
所以如果我有:
- 父列表项
- 列表项
对于 "List item" 元素,我希望返回的父元素是 "Parent list item" 元素。 "Parent list item" 的父级将为空。
关于如何做到这一点有什么想法吗?
如您所见,没有任何方法可以满足您的需求。因此,您只需要使用提供的功能将一些东西放在一起。
下面是实现一个函数的快速尝试,该函数给列表项 returns 父列表项(如果找到的话)。否则它 returns 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
我正在尝试获取 Google 文档中 ListItem
的父级 ListItem
。 getParent()
函数获取整个列表的父元素(例如 body),而不是父列表项。
所以如果我有:
- 父列表项
- 列表项
对于 "List item" 元素,我希望返回的父元素是 "Parent list item" 元素。 "Parent list item" 的父级将为空。
关于如何做到这一点有什么想法吗?
如您所见,没有任何方法可以满足您的需求。因此,您只需要使用提供的功能将一些东西放在一起。
下面是实现一个函数的快速尝试,该函数给列表项 returns 父列表项(如果找到的话)。否则它 returns 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