1

I'm trying to make a filter with passing multiple values for the filter but have only a single return.

field: 'name',
    filter: {
       condition: function(searchTerm, cellValue) {
        var strippedValue = (searchTerm).split(';');
        //console.log(strippedValue);
        for (i = 0; i < strippedValue.length; i++){
          if (cellValue.indexOf(strippedValue[i]) == -1)
            return false;    
          return true;
        }
        //return cellValue.indexOf(strippedValue) >= 0;
      }
    }, headerCellClass: $scope.highlightFilteredHeader

find the test code here http://plnkr.co/edit/UVDWfucjclXl4Ij9Ylm7?p=preview

3
  • What are you trying to accomplish ? what is the use case where you need more than one value for the filter ? and how are you planning to put in multiple values for say the name for example ? Commented May 6, 2015 at 19:40
  • I'm working on a contract management project which was created demand to make multiple filters in the search fields Ex: filter by "acrediaria; DNIT "must return values that contain the client" acrediaria "or" DNIT ". Commented May 7, 2015 at 16:04
  • This is solvable by using regex expressions which is already supported in the code you linked Commented May 9, 2015 at 14:27

2 Answers 2

4

Resolved, I made some adjustments to improve the code as well.

 condition: function(searchTerm, cellValue) {
    var separators = ['-', '/', ':', ';', ','];
    var strippedValue = searchTerm.split(new RegExp(separators.join('|'), 'g'));
    var bReturnValue = false;
    //console.log(strippedValue, "teste");
    for(iIndex in strippedValue){
        var sValueToTest = strippedValue[iIndex];
        sValueToTest = sValueToTest.replace(" ", "");
        if (cellValue.toLowerCase().indexOf(sValueToTest.toLowerCase()) >= 0)
            bReturnValue = true;
    }
    return bReturnValue;
}

Look code in link: http://plnkr.co/edit/UVDWfucjclXl4Ij9Ylm7?p=preview

Sign up to request clarification or add additional context in comments.

Comments

0

If someone needs a AND and not OR

filter: {
         condition:function(searchTerm, cellValue){          
                    if(cellValue===null){
                        return false;
                    }
                    let separators = [' ', '/', ':', ';', ','];
                    let strippedValue = searchTerm.split(new RegExp(separators.join('|'), 'g'));
                    let bReturnValue = false; 
                    let intNumFound = 0;
                    for(let iIndex in strippedValue){
                            let sValueToTest = strippedValue[iIndex];
                            sValueToTest = sValueToTest.replace(" ", "");
                            if (cellValue.toLowerCase().indexOf(sValueToTest.toLowerCase()) >= 0){
                            intNumFound++;
                            }
                            //bReturnValue = true;
                    } 
                    if(intNumFound>=strippedValue.length){
                        bReturnValue = true;
                    }
                    return bReturnValue;   
                }   

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.