Google Apps Script高亮选中文本时整行被高亮问题咨询
问题根源
当前代码直接对选中区域所属的完整文本元素应用样式,所以会把整行/整段文本全部高亮。要实现仅高亮选中片段,需要获取选中文本在所属元素中的起止偏移位置,仅对该区间内的文本应用样式。
修改后代码
function myFun4(){ var selection = DocumentApp.getActiveDocument().getSelection(); if(selection){ var rangeElements = selection.getRangeElements(); // 定义高亮样式 var highlightStyle = {}; highlightStyle[DocumentApp.Attribute.BOLD] = true; highlightStyle[DocumentApp.Attribute.BACKGROUND_COLOR] = '#FFFF00'; // 遍历所有选中的元素,兼容跨段落选中的场景 for(var i = 0; i < rangeElements.length; i++) { var currentRange = rangeElements[i]; var textElement = currentRange.getElement().asText(); // 获取选中内容在当前元素中的起止位置 var startOffset = currentRange.getStartOffset(); var endOffset = currentRange.getEndOffsetInclusive(); // 仅对选中区间应用样式 textElement.setAttributes(startOffset, endOffset, highlightStyle); } } }
修改说明
- 新增了Range元素遍历逻辑,可支持跨段落、跨元素的选中文本高亮
- 通过
getStartOffset()和getEndOffsetInclusive()方法精准定位选中文本的范围 - 调用支持区间参数的
setAttributes方法,不再对整个文本元素应用样式
内容的提问来源于stack exchange,提问作者gus
相关产品推荐
相关产品推荐

