Javascript 需要Jquery帮助-无限循环?
我对此代码有问题:Javascript 需要Jquery帮助-无限循环?,javascript,jquery,Javascript,Jquery,我对此代码有问题: var par = []; $('a[name]').each(function() { if (($(this).attr('name')).indexOf("searchword") == -1) { par.push($(this).attr('name')); $('.content').empty(); for (var i = 0; i < par.len
var par = [];
$('a[name]').each(function() {
if (($(this).attr('name')).indexOf("searchword") == -1) {
par.push($(this).attr('name'));
$('.content').empty();
for (var i = 0; i < par.length; i++) {
$(".content").append('<a id="par" href="#' + par[i] + '">' + par[i] + '</a><br />');
}
}
});
<代码> var PAR=[];
$('a[name]')。每个(函数(){
if($(this.attr('name')).indexOf(“searchword”)=-1){
推(美元)(这个)。
$('.content').empty();
对于(var i=0;i<PAR.长度;i++){
$(“.content”).append(“”); } } });
它会导致ie和firefox弹出警告窗口“停止运行此脚本”。但只有当页面上有大量数据时才会发生这种情况。有没有办法修复它?您的代码应该如下所示:
var par = [];
$('a[name]').each(function() {
if (($(this).attr('name')).indexOf("searchword") == -1) {
par.push($(this).attr('name'));
}
});
$('.content').empty();
for (var i = 0; i < par.length; i++) {
$(".content").append('<a id="par" href="#' + par[i] + '">' + par[i] + '</a><br />');
}
浏览器在单个线程上运行所有javascript(以及大多数页面交互)。当您在没有中断的情况下运行这样的长循环时,UI完全冻结。你应该试着让你的算法做得更少,但如果不可能,你可以使用这个技巧做一些工作,然后暂停,让浏览器控制UI线程一点,然后做更多的工作
var $targets = $('a[name]');
var current = 0;
var i = 0;
function doSomeWork() {
if (i == $targets.length) return;
var $t = $targets[i];
if (($t.attr('name')).indexOf("searchword") == -1) {
par.push($t.attr('name'));
$('.content').empty();
for (var i = 0; i < par.length; i++) {
$(".content").append('<a id="par" href="#' + par[i] + '">' + par[i] + '</a><br />');
}
}
i++;
window.setTimeout(arguments.callee, 0);
}
var$targets=$('a[name]');
无功电流=0;
var i=0;
函数doSomeWork(){
如果(i=$targets.length)返回;
var$t=$targets[i];
if($t.attr('name')).indexOf(“searchword”)==-1){
PAR.PAST($TATOTR(名称));
$('.content').empty();
对于(var i=0;i<PAR.长度;i++){
$(“.content”).append(“
”);
}
}
i++;
setTimeout(arguments.callee,0);
}
这会在函数中进行一次循环迭代,然后再生成。在一个函数调用中执行多个操作可能是一个好主意,但您可以尝试这样做。关于这个想法的一篇文章:这不仅是不必要的,这就是问题所在。+1是关于完全删除数组,只在第一次迭代中进行追加的评论。如果这个数组不在其他任何地方使用,这显然是我自己的答案的一种方式,因为它现在是多余的。我想保留的一切都可以简化为一条评论。选择器可以简化为
$('a[name]:not(a[name*=searchword])
,并且可以删除if语句。也许是偏好的问题,但我认为这更整洁。。。
var $targets = $('a[name]');
var current = 0;
var i = 0;
function doSomeWork() {
if (i == $targets.length) return;
var $t = $targets[i];
if (($t.attr('name')).indexOf("searchword") == -1) {
par.push($t.attr('name'));
$('.content').empty();
for (var i = 0; i < par.length; i++) {
$(".content").append('<a id="par" href="#' + par[i] + '">' + par[i] + '</a><br />');
}
}
i++;
window.setTimeout(arguments.callee, 0);
}