Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要Jquery帮助-无限循环?_Javascript_Jquery - Fatal编程技术网

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);
}