2011-05-07 69 views
0

好吧,我遇到了一个简单的JavaScript代码,它将搜索页面中所有超快速工作的超链接。唯一的问题是,当浏览器尝试在div中重新制作这些链接时,它会冻结,只要按下浏览器拒绝加载的按钮,就不会发生错误。正如你可以看到它从表单获得输入,然后搜索每个超链接的这些条款,然后应该填充链接的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); 
    } 
} 
} 
} 

回答

1

您正在创建一个无限循环。
您使用document.getElementsByTagName("a")创建的nodeList是直播的,即如果您向该页面添加链接,它将自动出现在该列表中!是的,没错,即使没有重新查询。 Here's a reference doc

您要添加链接到节点列表然后匹配并添加到在节点列表末尾,则其匹配等等等等

做你想做的事,你应该创建一个初始阵列什么像这样的链接。

//creates a real js array from a nodelist 
var list = Array.prototype.slice.call(document.getElementsByTagName("a"), 0); 

这里是一个explanation of Array.prototype.slice.call

+0

哦,你是一个传说非常感谢你在外面撕我的头发。 – 2011-05-07 16:09:05

+0

我今天遇到过一个问题,就像往常一样,这个代码在ie 7中不起作用。是否有修复? – 2011-05-14 16:08:30

0

而且更改大小写错误:

var text1 = document.createTextNode(output.innerhtml); 

var text1 = document.createTextNode(output.innerHTML);