返回列表 發帖

請問 RegExp().test用if else判斷再加上class的問題

原本的程式碼只有在篩選完後addClass,但是我想在中間加判斷,true加 addClass('selected'),false加 removeClass('selected'),可是用this會跑出 物件不支援此屬性或方法的錯誤,請問要怎麼修改呢?
謝謝~
//原本的
if(condition){
        filterSection.find('tbody#result tr').find(column).filter(function(){
                (new RegExp(condition).test(this.innerText));                                                   
        }).addClass('selected');                        
}

//修改的
if(condition){
        filterSection.find('tbody#result tr').find(column).filter(function(){
        a = (new RegExp(condition).test(this.innerText));
        if(a==true){
                this.addClass('selected')}
        else{
                this.removeClass('selected')}                                  
        })
}

根據 API 文件寫的,這邊的 this 指的是 DOM element,非 jQuery  物件
要用 jQuery 的 function 可以改用 $(this) 試試

不過我看你寫的邏輯,似乎有些問題,filter 裡面帶 function 是拿來做 filter 判斷的,以便後續的處理
例如原本的 filter 之後,還會加上 addClass 的動作
如果你在 filter() 那一段已經是做 loop 處理,不需後續的動作,應該改用 each() 去處理
To infinity and beyond!

TOP

本帖最後由 eaitng 於 2010-7-27 16:50 編輯

謝謝wmh的回應,我改成下面這樣就OK了
          $('.FilterSection').find('tbody#result tr').each(function(){
                  a=true;
                  b=true;
                  c=true;
                  d=true;
                  
                  if(condition_zone){
                                $(this).find('.column_zone').filter(function(){
                                         a = new RegExp(condition_zone).test(this.innerText);
                          })
            }
                            
            if(condition_no){
                          $(this).find('.column_no').filter(function(){
                                  b = new RegExp(condition_no).test(this.innerText);
                          })
                  }
                            
                  if(condition_name){
                          $(this).find('.column_name').each(function(){
                                  c = new RegExp(condition_name).test(this.innerText);
                          })
                          $(this).find('.column_ename').each(function(){
                                  d = new RegExp(condition_name).test(this.innerText);
                          })
                  }
                            
            if(a && b && (c||d) ){
                    $(this).addClass('selected');
            }
          })
         
          $('tbody#result tr').hide();
                $('.selected').show();

TOP

有一個問題想請教
                $('.FilterSection').find('input:text[name=name]').each(function(){  
                         condition_name = $.trim(this.value);  
                })  
我要讀取input:text name的值,不知道find後面要用什麼接,用each(function())又怪怪的,想請教上面的寫法可以怎麼修改呢?
謝謝~

TOP

返回列表 回復 發帖