好吧,我遇到了一个简单的javascript代码,它将搜索页面中的所有超链接,这些超链接可以快速运行。唯一的问题是当浏览器尝试在div中重制这些链接时冻结,只要我按下浏览器拒绝加载的按钮就没有错误。正如你可以看到它从表单中获取输入然后搜索这些术语的每个超链接然后应该用链接填充div,但事实并非如此。代码如下。
function search0(){
var lists = document.getElementsByTagName("a");
for (var i = 0; i < lists.length; i++) {
var output = lists[i];
var team1 = document.getElementById("search1").value;
var matchPos1 = output.innerHTML.search(team1);
if(matchPos1 != -1){
var team2 = document.getElementById("search2").value;
var matchPos2 = output.innerHTML.search(team2);
if(matchPos2 != -1){
var elem1 = document.createElement("a")
var styleattr=document.createAttribute("href");
styleattr.nodeValue=output;
elem1.setAttributeNode(styleattr);
var text1 = document.createTextNode(output.innerhtml);
elem1.appendChild(text1);
var parentdiv = document.getElementById("frame2");
parentdiv.appendChild(elem1);
}
}
}
}
答案 0 :(得分:1)
你正在创造一个无限循环
您使用document.getElementsByTagName("a")
创建的nodeList是实时的,即如果您向该页面添加链接,它将自动显示在此列表中!是的,这是对的,即使没有重新考验。 Here's a reference doc。
您正在添加指向nodeList的链接,然后将其匹配并添加到nodeList的末尾,然后匹配,依此类推等等
要做你想做的事,你应该创建一个这样的初始链接数组。
//creates a real js array from a nodelist
var list = Array.prototype.slice.call( document.getElementsByTagName("a"), 0 );
答案 1 :(得分:0)
同时更改区分大小写的错误:
var text1 = document.createTextNode(output.innerhtml);
要
var text1 = document.createTextNode(output.innerHTML);