Не удается поместить результаты поиска в гиперссылки и добавить в div - PullRequest
0 голосов
/ 07 мая 2011

хорошо, я наткнулся на простой код 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);
    }
}
}
}

Ответы [ 2 ]

1 голос
/ 07 мая 2011

Вы создаете бесконечный цикл.
Созданный с помощью document.getElementsByTagName("a") список узлов является живым, т. Е. Если вы добавите ссылку на страницу, она автоматически появится в этом списке! Да, это верно, даже без запроса. Вот справочный документ .

Вы добавляете ссылки на список узлов, которые затем сопоставляются и добавляются в конец списка узлов, которые затем сопоставляются и т. Д.

Чтобы сделать то, что вы хотите, вы должны создать исходный массив ссылок, подобных этой.

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

Вот объяснение Array.prototype.slice.call

0 голосов
/ 07 мая 2011

Также измените чувствительную к регистру ошибку:

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

На

var text1 = document.createTextNode(output.innerHTML);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...