我正在尝试获取网址列表,并在链接到的网页中迭代搜索关键字。但是,当我运行程序时,它只返回列表的最后一个元素,其页面具有关键字的链接数。当我尝试使用
运行它时http://www.google.com
http://www.yahoo.com
http://www.bing.com
并搜索
google
在其中,它返回
http://www.bing.com
http://www.bing.com
为什么在将它设置为for循环中的每个元素时,它会采用列表的最后一个元素?以下是我的代码。
<html>
<head>
<title></title>
</head>
<body>
<div>
Links: <textarea rows="4" cols="50"></textarea><br>
Search term: <input type="text" name="search" id="search"><br>
<button>search</button>
</div>
<div id="result">
<ul>
</ul>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
function searchLinks() {
var links = $('textarea').val();
links = links.replace(/(\r\n|\n|\r)/gm," ");
links = links.replace(" "," ").split(" ");
var searchTerm = $("#search").val();
for(var i=0;i<links.length;i++) {
var link = links[i];
$.get(link).success(function(data){
if (data.indexOf(searchTerm) > -1) {
$( "#result ul" ).append("<li>"+link+"</li>");
}
});
}
}
var search = $("button");
search.click(function() {searchLinks()});
</script>
</body>
</html>
答案 0 :(得分:3)
循环遍历异步调用时需要使用闭包:
for(var i=0;i<links.length;i++) {
(function(link) {
$.get(link).success(function(data){
if (data.indexOf(searchTerm) > -1) {
$( "#result ul" ).append("<li>"+link+"</li>");
}
});
})(links[i])
}