我想获取用户突出显示区域中的所有元素。问题是当元素位于树的不同部分时,我不知道如何遍历 DOM 的不同部分。到目前为止,我的代码只能从选择范围的 startContainer 中获取元素。我需要某种递归吗?这是我的代码: getSelectedElementTags:function(){ var range, sel, container; sel = content.window.getSelection(); if (sel.getRangeAt) { if (sel.rangeCount > 0) { range = sel.getRangeAt(0); } } else { range = content.window.createRange(); range.setStart(sel.anchorNode, sel.anchorOffset); range.setEnd(sel.focusNode, sel.focusOffset); alert("range created"); } if (range) { container = range["startContainer"]; var elms = container.parentNode.getElementsByTagName("*"); elmlist = "parent: "+container.parentNode.tagName + " (" + elms.length + ")\n"; for (i in elms) { if (elms[i].tagName != null) { elmlist += elms[i].tagName+"\n"; } } alert(elmlist); }}, 最佳答案 您可以使用 TreeWalker 使用 document.createTreeWalker 。下面是一个例子。它列出了部分或完全选择的所有元素。您可以通过修改传递给 document.createTreeWalker 的参数轻松更改行为。请注意,在 Firefox 中,您不需要检查选择的 getRangeAt 方法是否存在。只有旧版本的 WebKit 才需要此检查。此外,IE 编辑 根据下面的评论进行修复。function rangeIntersectsNode(range, node) { var nodeRange; if (range.intersectsNode) { return range.intersectsNode(node); } else { nodeRange = node.ownerDocument.createRange(); try { nodeRange.selectNode(node); } catch (e) { nodeRange.selectNodeContents(node); } return range.compareBoundaryPoints(Range.END_TO_START, nodeRange) == -1 && range.compareBoundaryPoints(Range.START_TO_END, nodeRange) == 1; }}function getSelectedElementTags(win) { var range, sel, elmlist, treeWalker, containerElement; sel = win.getSelection(); if (sel.rangeCount > 0) { range = sel.getRangeAt(0); } if (range) { containerElement = range.commonAncestorContainer; if (containerElement.nodeType != 1) { containerElement = containerElement.parentNode; } treeWalker = win.document.createTreeWalker( containerElement, NodeFilter.SHOW_ELEMENT, function(node) { return rangeIntersectsNode(range, node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT; }, false ); elmlist = [treeWalker.currentNode]; while (treeWalker.nextNode()) { elmlist.push(treeWalker.currentNode); } console.log(elmlist); }}<input type="button" onclick="getSelectedElementTags(window)" value="Get selected elements">关于javascript - 如何获取所有突出显示的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1482832/
10-11 23:58