JQUERY在$ .each循环中获取上一个和下一个值

时间:2017-04-12 06:20:46

标签: jquery loops

我在JQUERY的循环中遇到了问题。感谢“get”查询一些数据(采用JSON格式)。

我想将这些数据插入带有“optgroup”的下拉列表中。但我在做optgroup方面遇到了问题。

我想在插入optgroup之前将之前的值与$ .each循环中的当前值进行比较

=> IF current_value(v.SG_CODE)!= previous_value(v.SG_CODE)然后添加optgroup

但我不知道如何得到它。你能帮我吗?

我有这段代码:

function myFunction (param){

        var select = $("#myselect");
        select.empty();
        select.append(
            new Option('Loading...', '-1')
        );
        var jqXHR = $.getJSON( "myCFC.cfc", {
            "method" : "myMethod",
            "param":    param,
        });

        setTimeout( function(){
        // If status in pending, call the method fail   
            if ( jqXHR && jqXHR.state() === "pending" ){
                jqXHR.abort();
            }
        }, 3000 ); // 3s

        jqXHR.done( function( data, textStatus, jqXHR ){
            // success - Treatment of the request
            //console.log( data, textStatus, jqXHR );
            select.empty();     
            console.log(data.length);
            if(data.length>0){
                select.show();                      
                $.each(data,function(k,v){          
                    //alert(v.ID + " --- " + v.VALUE);                              
                        select.append('<optgroup label="' + v.SG_CODE +'">');       
                        select.append('<option value="' + v.ID + '">' + v.SUBJECT_CODE + '</option>');      
                        select.append('</optgroup>');                                       
                });
            }else{
                select.hide();
            }
        });

        jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
            // AJAX Request failed
            console.log( jqXHR, textStatus, errorThrown ); 
        });

        jqXHR.always( function( jqXHR, textStatus ){
        //console.log( jqXHR, textStatus );
        })
    }   

非常感谢您的帮助。

此致

的Seb

2 个答案:

答案 0 :(得分:0)

您可以使用以下方式访问上一个值:

data[k-1].SG_CODE

但首先测试 k 为非零,因为零没有前一个元素,引用SG_CODE或其他属性会触发异常。所以你的if看起来像这样:

if (k == 0 || v.SG_CODE != data[k-1].SG_CODE) {
    // ... add
}

答案 1 :(得分:0)

最简单的方法是,您只需将最后一个密钥存储在临时变量

中即可
var lastKey = -1
$.each(data,function(k,v){

   if(data[lastKey]. SG_CODE !== v. SG_CODE ){
       //add to group
   }
   lastKey = k;
}