操作DOM时出现无限循环问题

时间:2018-11-17 12:17:14

标签: javascript dom-manipulation

我正在学习有关DOM操作的知识,并且为了练习,我试图吸引前100名对#Javascript感兴趣的Twitter用户(请参阅链接)。由于到目前为止,Twitter不允许您在浏览器控制台中使用Glide.with(context) .load(imgurl) .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.RESOURCE) .error(R.drawable.no_image)) .into(holder.imageView); 功能,因此我设法在HTML中以可视方式显示任何字符串,在这种情况下,是在搜索文本框下方。

这是我的“自定义” console.log()

console.log()

要获取用户名,我会每4秒不断滚动页面并查找用户名,直到function consoleLog(data) { var searchTextBox = document.querySelector("#doc > div.topbar.js-topbar > div > div > div > div > div"); var p = document.createElement("p"); var innerText = document.createTextNode(data); p.appendChild(innerText); searchTextBox.appendChild(p); } 变量中包含100个或更多用户名为止。

usernames

问题是var scrollPage = setInterval(function() { window.scrollTo(0, document.body.scrollHeight); }, 4000); var usernames = []; while (true) { // <------ PROBLEM if (usernames.length < 100) { consoleLog("Getting usernames again"); usernames = getUsernames(); } else { consoleLog("We have ENOUGH usernames. BREAK"); clearInterval(scrollPage); printUsernames(); break; } } function printUsernames() { for(var user of usernames) { consoleLog(user); } } function getUsernames() { var results = []; var usernameNodes = document.getElementsByClassName("username u-dir u-textTruncate"); var username = usernameNodes[0].textContent; for(var node of usernameNodes) { results.push(node.textContent); } return results.filter(isUnique); } function isUnique(value, index, self) { return self.indexOf(value) === index; } 循环进入了无限循环,我不知道为什么。我认为代码的逻辑是正确的。实际上,如果我首先将所有已声明的函数复制并粘贴到浏览器控制台,然后启动while间隔,最后启动while循环,则效果很好。当我一次将所有代码复制并粘贴到浏览器控制台中时,就会出现问题。就像间隔的执行和while循环以某种方式发生冲突一样。但是我听不懂。

1 个答案:

答案 0 :(得分:0)

最好像这样进行调节:

var usernames = [];
// This will automatically end when length is greater or equall 100
// no need to break
while (usernames.length < 100) {
  consoleLog("Getting usernames again");
  usernames = getUsernames();
}
consoleLog("We have ENOUGH usernames.");
clearInterval(scrollPage);
printUsernames();