2011-05-07 15 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);