刷壁纸的时候,发现标签都是不认识的单词,于是想到遍历便签通过模拟按键点下进行翻译。
但有个问题,就是按常规思路写出逻辑,再for循环总是不能同步点击,for会自己优先计算完然后固定i为最后一个值,导致每次都是重复选中最后一个标签;据说这是JS的局限性,什么异步操作的,由于是业余只会看逻辑,最后就想出个通过逻辑解决的办法——将setTimeout和需求的函数绑在一块再循环。
//选中文本函数
function SelectRan(para){
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
let referenceNode = para;
let selection = window.getSelection();
let range = document.createRange();
range.selectNode(referenceNode);
selection.addRange(range);
}
//按键函数这里指定按键T
//需要安装easyscholar插件
const ClickT = new KeyboardEvent('keydown', {
bubbles: true, cancelable: true, keyCode: 84
});
//输入Class\Tag类元素
function Run(ClassPara,time) {
setTimeout(function(){
//注,将需求函数SelectRan的参数time和下方的“time*1000”是同一个
//以此方式绑在一起
console.log( ClassPara[time].innerText )
SelectRan( ClassPara[time] )
//模拟点击按键T
document.body.dispatchEvent(ClickT)
}, 1000+time*1000)
}
for (var i=0;i< document.getElementsByClassName("tagname").length ;i++){
Run(document.getElementsByClassName("tagname"), i)
}
其他思路,绑定页面时或可以设置点击页面触发。