Javascript 如何重新启动代码?(在动态更新的页面上)
此代码在数据ID之间选择最高数值,并向其添加石灰背景。Javascript 如何重新启动代码?(在动态更新的页面上),javascript,jquery,greasemonkey,tampermonkey,Javascript,Jquery,Greasemonkey,Tampermonkey,此代码在数据ID之间选择最高数值,并向其添加石灰背景。 代码仅在第一次加载页面时有效,但在加载页面时,数据id发生了变化,因此无法搜索新的数据id。我添加了一个函数,用于再次启动代码,但它不起作用 如何找到正在更改的数据id并添加背景? 我用它来对付猴子和油腻鬼 var i=0,howManyTimes=20; 函数f(){ maxData=$(“.answers li[data id]”)。get().reduce((maxObj,crrntNode)=>{ 变量节点=$(crrntNode
代码仅在第一次加载页面时有效,但在加载页面时,数据id发生了变化,因此无法搜索新的数据id。我添加了一个函数,用于再次启动代码,但它不起作用 如何找到正在更改的数据id并添加背景? 我用它来对付猴子和油腻鬼
var i=0,howManyTimes=20;
函数f(){
maxData=$(“.answers li[data id]”)。get().reduce((maxObj,crrntNode)=>{
变量节点=$(crrntNode).data(“id”);
var idVal=parseInt(node.substr(node.length-4),16);
if(idVal>maxObj.value){
maxObj.value=idVal;
maxObj.node=crrntNode;
}
返回maxObj;
},
{值:0,节点:null}
);
//$(“body”).append(`最高的数据id值是${maxData.value}。`)
$(maxData.node).css(“背景”、“石灰”).attr(“id”、“findvalue”);
$(document).ready(函数(){//当文档已加载时)
setTimeout(函数(){
//document.getElementById(“findvalue”).setAttribute(“id”、“oldvalue”);
$('li').css(“背景”,“背景”);
},100);//两秒钟后代码将执行。
});
var x=数学地板((数学随机()*500)+1);
i++;
如果(i<多少次){
设置超时(f,x);
}
}
f()代码>
你最喜欢什么颜色?
紫色
蓝色
黄色
红色
首先,您需要一些东西来再次调用函数,无论您希望这种行为发生多少次
然后,确保在代码中的某个地方将计数器重置回零
i++;
if (i < howManyTimes) {
setTimeout(f, x);
}
i++;
如果(i<多少次){
设置超时(f,x);
}
只有当计数器小于限制变量时,才会调用setTimeout。重置计数器,调用f()时可以再次调用setTimeout。您试图破解的页面/站点显然是通过AJAX更新的,这是最适合waitforkyelments()
或MutationObserver
的作业
对于setTimeout()
,这不是一个很好的用法<不管怎样,code>setInterval()
会更合适
此外,您不需要$(document).ready
,除非您的脚本设置为@在文档开始时运行
无论如何,下面是如何使用MutationObserver检测新的/更改的答案:
函数highliteMaxAnswer(){
var maxData=$(“.answers li[data id]”)。get().reduce((maxObj,crrntNode)=>{
//--不信任页面更新数据。但我们知道属性正在更改。
var nodeId=$(crrntNode).attr(“数据id”);
var idVal=parseInt(nodeId.slice(-4),16);
if(idVal>maxObj.value){
maxObj.value=idVal;
maxObj.node=crrntNode;
}
返回maxObj;
},
{值:0,节点:null}
);
$(“.answers li[data id]”)css(“background”,”);
$(maxData.node).css(“背景”、“石灰”);
}
highliteMaxAnswer();
var answerObsrvr=新的变异观察者(answerChangeHandler);
变量obsConfig={
childList:true,attributes:true,子树:true,attributeFilter:['data-id']
};
answerObsrvr.observe(document.body,obsConfig);//如果可能的话,使用容器和身体。
函数answerChangeHandler(mutationRecords){
var answersChanged=假;
mutationRecords.forEach(mutn=>{
if(mutn.type==“属性”)
answersChanged=正确;
else if(mutn.type==“childList”&&mutn.addedNodes&&mutn.addedNodes.length){
for(让多个附加节点的nwNode){
if(nwNode.attributes&&nwNode.attributes[“数据id”]){
answersChanged=正确;
打破
}
}
}
} );
if(answersChanged)highliteMaxAnswer();
}
/*---------------------------------------------------------------------
下面的所有代码都只是为了模拟不断变化的页面。
不要将其包含在脚本中。
*/
$(“按钮”)。单击(函数(){
this.qCnt=this.qCnt | | 1;
这个.qCnt++;
$(“#问题文本”).text(`您最喜欢的颜色是什么${this.qCnt}?`);
$(“.answer”)。每个(函数(){
var newDataId=“58b989006227928090d”+getRandomHexWord();
//--使用attr()和data()来模拟网站的功能。
$(this.attr(“数据id”,newDataId);
} );
} );
函数getRandomHexWord(){
return('0000'+parseInt(65536*Math.random()).toString(16)).slice(-4);
}
你最喜欢什么颜色?
紫色
蓝色
黄色
红色
模拟新问题
几乎与Q的问题重复:,和。非常感谢你救了我@Brock Adams