使用JS在HTML中搜索多个字符串

时间:2018-04-10 13:30:55

标签: javascript

我想实现这个已经有效的“if-solution-result”:

window.onload = function(){

if(document.body.innerHTML.toString().indexOf('jeff') > -1){
     alert('marker1 gefunden');
}
if(document.body.innerHTML.toString().indexOf('lisa') > -1){
     alert('marker2 gefunden');
}
// it could go on and on from here...
};

以更优雅的方式使用“for ...”循环,但我没有让它工作。

var marker = ["paul", "maria", "jeff", "lisa"];
for (var i=0; i<marker.length; i++){
if(document.body.innerHTML(marker) > -1){
  alert((marker) + 'gefunden');
    }
}

我坚持如何管理循环内的信息。

最终应该做什么(正如我的“if”编码所示):

加载HTML&gt;&gt;检查是否找到一个或多个阵列&gt;&gt;用找到的内容打开一个警告框。

3 个答案:

答案 0 :(得分:1)

您忘记在for循环中使用迭代器。和indexOf。

当你像这样使用for循环时,你有i这就是迭代器,看你的索引是什么。然后,您可以使用i通过marker[i]从数组中选择正确的值。

示例:

var marker = ["paul", "maria", "jeff", "lisa"];
for (var i=0; i<marker.length; i++){
if(document.body.innerHTML.indexOf(marker[i]) > -1){ // <-- right there
  alert((marker[i]) + 'gefunden');
    }
}

答案 1 :(得分:1)

这里有两个问题,

  • 使用textContent代替innerHTML,因为innerHTML也会检查属性值等。
  • 使用forEach迭代数组,includesindexOf检查值是否在body

例如

var bodyText = document.body.textContent; //save the textContent in a value beforehand rather than doing it in a loop.
var marker = ["paul", "maria", "jeff", "lisa"];
marker.forEach( (s, i) => bodyText.includes(s) && alert('marker' + i + ' gefunden') );

如果您的浏览器不支持箭头功能includes,那么

marker.forEach( function(s, i) { //s is the item in iteration from the array and i is the index
   //check if the body has the text and && will make sure that second expression will get executed only if first one has succeeded
   bodyText.indexOf(s) != -1 && alert('marker' + i + ' gefunden');
});

答案 2 :(得分:0)

作为最佳做法,我建议:

1,没有var,没有for循环,没有双引号,玩箭头功能

2,您应首先将document.body.innerHTML分配给变量:

let html = document.body.innerHTML;

(请注意,您可能需要剥离HTML标记以获得更好的结果)。

3,检查marker

中的每个项目
let marker = ['paul', 'maria', 'jeff', 'lisa'];

marker.filter((keyword) => {
  return html.indexOf(keyword) > -1;
}).forEach((keyword) => {
  alert(keyword);
});