如何在集合中搜索多个词组之间的首次出现?给定下面的示例测试代码,第一个条件将始终获胜,但是一旦我在while循环中发现短语中的第一个匹配项(与标记中的位置有关),我便要搜索该集合并结束搜索
<HTML>
<head>
</head>
<body>
<script>
function getAppDecision(){
var myCollection = document.getElementsByClassName('main');
var i = myCollection.length;
console.log(" myCollection.length : " + i);
while(i--) {
if (myCollection[i].innerText.search(/opened accounts/i) > -1) {
console.log("==> spot 1 - open accounts");
return;
}
if (myCollection[i].innerText.search(/being reviewed/i) > -1) {
console.log("==> spot 2 - being reviewed");
return;
}
if (myCollection[i].innerText.search(/verify your funding account/i) > -1) {
console.log("==> spot 3 - verify");
return;
}
}
};
</script>
<div class="main">
<span id="firstSpan">
<p> testing Being Reviewed</p>
<p> testing Opened Accounts</p>
<p> testing have Verify YOUR Funding account</p>
</span>
</div>
<script>
getAppDecision();
</script>
</body>
</html>
答案 0 :(得分:1)
您的myCollection
将不会获得您要查找的值。您可能需要更改代码以使其具有以下功能:
var myCollection = [];
document.querySelectorAll('#firstSpan p')
.forEach((elem) => myCollection.push(elem.innerText));
然后,您可以使用find()
:
find()方法返回数组中第一个元素的值 满足提供的测试功能。否则未定义是 返回。
它将在满足条件的第一个元素上停止。
您可以这样做:
var result = myCollection.find((item) => {
return (item.search(/opened accounts/i) > -1)
|| (item.search(/being reviewed/i) > -1)
|| (item.search(/verify your funding account/i) > -1);
});
然后,根据您的示例,result
的值应为testing Being Reviewed
。