我正在尝试使用以下代码删除文档中Range的所有内容。它能够从范围中获取RangeElements,但是在此操作之后它显然使文档处于奇怪的状态,使得我的应用程序中的其他代码无法使用。
代码取决于此Range所属的文档稍后会引发错误。我不确定这是否是由于此代码的具体原因,或者我是否需要采取其他措施将文档置于不同的可编辑状态。
/**
* Deletes the range and all of its RangeElements.
*/
function removeRange (range) {
Logger.log('removeRange called with range:' + range)
var rangeElements = range.getRangeElements()
Logger.log('removing ' + rangeElements.length + ' rangeElements')
for (var i = 0; i < rangeElements.length; i++) {
var rangeElement = rangeElements[i]
// http://stackoverflow.com/a/30604543/5465037
if (rangeElement.isPartial()) {
// It's partial!
Logger.log('it\'s partial!')
var startOffset = rangeElement.getStartOffset()
var endOffset = rangeElement.getEndOffsetInclusive()
rangeElement.getElement().asText().deleteText(startOffset, endOffset)
} else {
rangeElement.getElement().removeFromParent()
}
}
Logger.log('removeRange finished.')
}
修改:我正在调用以下代码,根据我自己在Google文档中的占位符获取范围。占位符的格式为{tagIdHere}
和{/tagIdHere}
。此代码确实用' '
替换了标记,但我无法正确删除此函数返回的Range。
/**
* Gets a range between the two tags, removing the tags.
*/
function getRangeBetweenAndRemoveTags (doc, tagId) {
var rangeBuilder = doc.newRange()
var startTag = '{' + tagId + '}'
var endTag = '{/' + tagId + '}'
var body = doc.getBody()
var startElement = body.replaceText(startTag, ' ')
var endElement = body.replaceText(endTag, ' ')
Logger.log('startElement: ' + startElement)
Logger.log('endElement: ' + endElement)
rangeBuilder.addElementsBetween(startElement, endElement)
var range = rangeBuilder.build()
return range
}