我正在构建一个刮板,该刮板需要从多个相邻元素中获取数据。本质上,存在用于显示类别的标题(h3),其旁边是排名表。我正在尝试对字符串进行爬网,以查明该字符串是否在类别中排名,如果是,则该字符串达到的排名(A,B或C),然后用描述目标内容的对象填充数组字符串达到的类别和等级(phe)。
最初,我在while循环中生成了一个错误(“无法定义null的属性'tagName'”,因为 sib 由于某种原因一直将其评估为null。我添加了一个测试,以防它在 arr 的末尾发生,但是现在代码无限期地挂起。我感觉同胞并没有立即被定义,但是我不能指责是这样还是为什么。
我正在测试Chrome DevTools中的所有内容,如果有帮助的话。另外,我没有在DevTools中使用Fat Arrow函数进行测试,因此它本身并不是导致此问题的原因,但是,如果从长远来看,它将使我烦恼,请告诉我!
(str) => {
let h = document.getElementsByTagName('h3');
let arr = [];
let res = [];
for ( let i = 0; i < h.length; i++){ //Filter out any h3's that are not category headers.
h[i].id.includes('category-') && arr.push(h[i]);
};
for ( let i = 0; i < arr.length; i++){
let head = arr[i].innerText; //Save the current category header.
let sib = arr[i].nextElementSibling; //Should be a table containing rank A.
while ((sib != null) && (sib.tagName == 'TABLE')){
if(sib.innerText.includes(str)){ //Create an object if the rankings table contains our target.
let hit = {};
hit.category = head;
hit.rank = sib.children[0].innerText;
res.push(hit);
}
else{ //Go to the next table which contains the next rank.
sib = sib.nextElementSibling;
};
};
};
return res;
}