Javascript 检查页面中是否存在来自数组的项。如果是,请提醒它。如果没有,请刷新页面

Javascript 检查页面中是否存在来自数组的项。如果是,请提醒它。如果没有,请刷新页面,javascript,jquery,userscripts,Javascript,Jquery,Userscripts,所以,我有一个用户脚本,可以在页面中查找字符串。如果找不到,则会在4秒钟后刷新页面: var item = 'apple'; if(document.body.innerHTML.toString().indexOf(item) > -1){ setTimeout(function() { alert(item + " was found"); }, 150); }else{ setTimeout(function()

所以,我有一个用户脚本,可以在页面中查找字符串。如果找不到,则会在4秒钟后刷新页面:

var item = 'apple';
if(document.body.innerHTML.toString().indexOf(item) > -1){
    setTimeout(function() {
        alert(item + " was found");
    }, 150);
}else{
    setTimeout(function()
               {
        location.reload(true);
    }, 4000);
}
这段代码工作得很好。但是,我想用数组搜索多个项目:

var item = [
    'apple',
    'peach'
];
for (var i = 0; i < item.length; i++){
    if(document.body.innerHTML.toString().indexOf(item[i]) > -1){
        player.play();
        setTimeout(function() {
            var curitem = item[i];
            alert(item[i] + " was found");
        }, 200);
    }
}
//else{
//    setTimeout(function()
//               {
//        location.reload(true);
//    }, 4000);
//}
var项=[
“苹果”,
“桃子”
];
对于(变量i=0;i-1){
player.play();
setTimeout(函数(){
var curitem=项目[i];
警报(发现[i]+“项”);
}, 200);
}
}
//否则{
//setTimeout(函数()
//               {
//位置。重新加载(true);
//    }, 4000);
//}
但我被卡住了,我不知道:

  • 如何对找到的数组项发出警报?按照目前的方式,它会提醒“未定义已找到”。
    这意味着脚本正在工作,它正在数组中查找项。但在警报中显示为“未定义”
  • 如果找不到任何内容,如何刷新页面

  • 这将在数组中找到第一个匹配项。这里使用Div id
    content
    ,因为脚本是示例代码段正文的一部分

    var项=[
    “苹果”,
    “桃子”
    ];
    //确保项目不包含特殊的正则表达式字符
    var itemRe=new RegExp(item.join(“|”);
    var result=document.getElementById(“content”).innerHTML.toString().match(itemRe);
    如果(结果){
    //player.play();
    setTimeout(函数(){
    警报(发现result.toString()+);
    }, 200);
    }否则{
    setTimeout(函数(){
    位置。重新加载(true);
    }, 4000);
    }

    gfg
    这将在数组中找到第一个匹配项。这里使用Div id
    content
    ,因为脚本是示例代码段正文的一部分

    var项=[
    “苹果”,
    “桃子”
    ];
    //确保项目不包含特殊的正则表达式字符
    var itemRe=new RegExp(item.join(“|”);
    var result=document.getElementById(“content”).innerHTML.toString().match(itemRe);
    如果(结果){
    //player.play();
    setTimeout(函数(){
    警报(发现result.toString()+);
    }, 200);
    }否则{
    setTimeout(函数(){
    位置。重新加载(true);
    }, 4000);
    }

    有几种方法可以做到这一点。我更喜欢正则表达式,因为它提供了更大的功能,而且对于大量术语来说,通常比循环更快

    代码如下:

    var项目=[
    “苹果”,
    “桃子”
    ];
    var itmRegEx=newregexp(`(${items.join(“|”)})`);
    var itmMtch=document.body.innerHTML.match(itmRegEx);
    if(itmMtch&&itmMtch.length){
    //player.play();
    //setTimeout(警报,200,发现itmMtch[1]+);
    setTimeout(console.log,200,找到itmMtch[1]+);
    }
    否则{
    console.log(“重新加载…”);
    //setTimeout(()=>{location.reload(true);},4000);
    
    }
    有几种方法可以做到这一点。我更喜欢正则表达式,因为它提供了更大的功能,而且对于大量术语来说,通常比循环更快

    代码如下:

    var项目=[
    “苹果”,
    “桃子”
    ];
    var itmRegEx=newregexp(`(${items.join(“|”)})`);
    var itmMtch=document.body.innerHTML.match(itmRegEx);
    if(itmMtch&&itmMtch.length){
    //player.play();
    //setTimeout(警报,200,发现itmMtch[1]+);
    setTimeout(console.log,200,找到itmMtch[1]+);
    }
    否则{
    console.log(“重新加载…”);
    //setTimeout(()=>{location.reload(true);},4000);
    
    }
    将“var curitem=item[i]”移动到setTimeout调用上方,并使用“alert(curitem+“was found”);而不是“i”超出范围scope@Daniel,是不允许的。你的新问题很简单,但它们也是新的。在原来的问题解决后,为这些人问一个新问题——下面的答案似乎是这样。@BrockAdams我以前也能这样做,而新解决方案带来的问题是新的:/所以我不知道,对不起。@Daniel,新解决方案只有一个问题,昨天就解决了。其他的东西是新特性,这些特性既不存在于原始的、已损坏的代码中,也不存在于原始问题中。您的原始问题已得到回答。请将“var curitem=item[i]”移到setTimeout调用上方,并使用“alert(curitem+”was found”);而不是“i”超出范围scope@Daniel,是不允许的。你的新问题很简单,但它们也是新的。在原来的问题解决后,为这些人问一个新问题——下面的答案似乎是这样。@BrockAdams我以前也能这样做,而新解决方案带来的问题是新的:/所以我不知道,对不起。@Daniel,新解决方案只有一个问题,昨天就解决了。其他的东西是新特性,这些特性既不存在于原始的、已损坏的代码中,也不存在于原始问题中。你原来的问题得到了回答。谢谢你的回复,我用当前的问题更新了我的帖子。谢谢你的回复,我用当前的问题更新了我的帖子。