我正在尝试制作一个扩展程序,在页面加载时为页面添加一些HTML。简而言之,它获取表格中的链接列表,加载这些链接,并抓取特定字符串并将其添加到我加载的原始页面。
以下是代码:由于网页的编码方式,我无法获得唯一ID,因为它们不存在所以忽略该部分。
var xhr = new XMLHttpRequest();
for (i = 0; i < length; i++) {
url = rows[i].getElementsByTagName("td")[0].getElementsByTagName('a')[0].getAttribute('href');
insert = rows[i].insertCell(-1);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
//var Data = JSON.parse(xhr.responseText);
var htmlString = xhr.responseText
, parser = new DOMParser()
, doc = parser.parseFromString(htmlString,"text/html")
, test = doc.getElementById('page-wrapper').children[1]
, ip_address = doc.getElementsByClassName('col-md-5')[0].children[5].children[0].children[0].children[10].innerHTML;
insert.innerHTML = ip_address;
}
};
xhr.open("GET",url,false);
xhr.send();
}
当我调用该函数时,它工作正常,但是加载需要很长时间,并且所有加载都在最后加载而不是在for循环的每次迭代完成时更新。我想减少加载所需的时间,但需要大量的时间,并且最后可能会立即更新耳塞。我试过搜索asycn javascript,但我试过的一些代码对我帮助不大。任何援助将不胜感激。
答案 0 :(得分:0)
使用现代Javascript:
rows.forEach(row => {
fetch(row.querySelector('td:first-of-type a:first-of-type').getAttribute('href'))
.then(res => res.json())
.then(data => {
// do manipulations with DOM
})
.catch(console.log)
})