能否使用 JavaScript 选中网页里的指定文字?
如题。是否可能使用 JavaScript 选择网页里的指定文字?
有这个问题是因为需要选择某个节点的文字移动到其它节点显示。但是网页内容又是程序生成的,文字不在固定的节点里,节点元素也没有 id class 选择器。
如题。是否可能使用 JavaScript 选择网页里的指定文字?
有这个问题是因为需要选择某个节点的文字移动到其它节点显示。但是网页内容又是程序生成的,文字不在固定的节点里,节点元素也没有 id class 选择器。
PS: 能直接给例子或者描述完整需求么, 有可能一开始方向就歪了啊…
另一个思路是不需要移动节点,把文字复制 /移动过去,让原节点不可见、不占位也可以
“`javascript
function selectText(text) {
let nodes = document.querySelectorAll(‘body *’)
let textNode
let textStartIndex
for (let i = 0, len = nodes.length; i < len; i++) {
textStartIndex = nodes[i].innerHTML.indexOf(text)
if (textStartIndex > -1) {
if (nodes[i].children.length === 0) {
textNode = nodes[i]
break // 找到即返回
}
}
}
if (textNode) {
let range = document.createRange()
// range.selectNode(textNode)
range.setStart(textNode.firstChild, textStartIndex)
range.setEnd(textNode.firstChild, textStartIndex + text.length)
let selection = window.getSelection()
selection.removeAllRanges()
selection.addRange(range)
}
}
selectText(‘指定文字’) // 当前 V2EX 页面执行
“`
* 以上代码仅用于作为示例代码,并没有做边界测试,浏览器兼容,性能优化。
这种情况先把 DemoA 的数据结构化成 map, 然后再迭代 DemoB, 从 map 里取 Google 什么的, 取到就塞
document.querySelector(“#demoBoxA”).querySelectorAll(“.row”).forEach(function(v){
if(/Google|Huawei|BlackBerry/i.test(v.querySelector(“.col-md-6”).innerText)){//text node 内容匹配检测
document.querySelector(“#demoBoxB”).appendChild(v) //下一步脱裤子搞事的事情自己写
}
})