skip to Main Content

I have an inssue with searching of an item in a list while the list is combined with numbers and strings while numbers are at the start.

for example. I have a list of a type code – value:

[{code: 1111, value: oneoneone}
{code: 2222, value: twotwotwo}
{code: 3333, value: threethree}
{code: 4444, value: fourfourfour}]

List looks like this:

1111 - oneoneone
2222 - twotwotwo
3333 - threethree

code example:

<select> class="myClass"
 name="codeValueList"
 [(ngModel)]="selectedItem"
 (ngModelChange)="updateOnProcess($event)"
 <option> [ngValue]="null"></option>
 <option> *ngFor="let item of codeValueList" [ngValue]="s">{s.code + s.value}</option>

now while list might be really long I would like to search name by keyboard,
however since numbers start first It only searches by numbers.

is there a way to ignore search by number and only search by string using selected tag?

I tried using dataList however it doesnt work properly with an object of code value.

thanks

2

Answers


  1. Did you set these numbers or is it something that autoincrements? Because you could turn these numbers into strings and then you would use the dataList, I believe there is no need for them to be ints or floats.

    Login or Signup to reply.
  2. If you can use JavaScript, here is an example filter using Html, CSS and JavaScript

    HTLM:

    <!-- Control buttons -->
    <div id="myBtnContainer">
      <button class="btn active" onclick="filterSelection('all')"> Show all</button>
      <button class="btn" onclick="filterSelection('cars')"> Cars</button>
      <button class="btn" onclick="filterSelection('animals')"> Animals</button>
      <button class="btn" onclick="filterSelection('fruits')"> Fruits</button>
      <button class="btn" onclick="filterSelection('colors')"> Colors</button>
    </div>
    
        <!-- The filterable elements. Note that some have multiple class names (this can be used if they belong to multiple categories) -->
        <div class="container">
          <div class="filterDiv cars">BMW</div>
          <div class="filterDiv colors fruits">Orange</div>
          <div class="filterDiv cars">Volvo</div>
          <div class="filterDiv colors">Red</div>
          <div class="filterDiv cars">Ford</div>
          <div class="filterDiv colors">Blue</div>
          <div class="filterDiv animals">Cat</div>
          <div class="filterDiv animals">Dog</div>
          <div class="filterDiv fruits">Melon</div>
          <div class="filterDiv fruits animals">Kiwi</div>
          <div class="filterDiv fruits">Banana</div>
          <div class="filterDiv fruits">Lemon</div>
          <div class="filterDiv animals">Cow</div>
        </div>
    

    CSS:

    .container {
      overflow: hidden;
    }
    
    .filterDiv {
      float: left;
      background-color: #2196F3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none; /* Hidden by default */
    }
    
    /* The "show" class is added to the filtered elements */
    .show {
      display: block;
    }
    
    /* Style the buttons */
    .btn {
      border: none;
      outline: none;
      padding: 12px 16px;
      background-color: #f1f1f1;
      cursor: pointer;
    }
    
    /* Add a light grey background on mouse-over */
    .btn:hover {
      background-color: #ddd;
    }
    
    /* Add a dark background to the active button */
    .btn.active {
      background-color: #666;
      color: white;
    }
    

    JavaScript:

    filterSelection("all")
    function filterSelection(c) {
      var x, i;
      x = document.getElementsByClassName("filterDiv");
      if (c == "all") c = "";
      // Add the "show" class (display:block) to the filtered elements, and remove the "show" class from the elements that are not selected
      for (i = 0; i < x.length; i++) {
        w3RemoveClass(x[i], "show");
        if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
      }
    }
    
    // Show filtered elements
    function w3AddClass(element, name) {
      var i, arr1, arr2;
      arr1 = element.className.split(" ");
      arr2 = name.split(" ");
      for (i = 0; i < arr2.length; i++) {
        if (arr1.indexOf(arr2[i]) == -1) {
          element.className += " " + arr2[i];
        }
      }
    }
    
    // Hide elements that are not selected
    function w3RemoveClass(element, name) {
      var i, arr1, arr2;
      arr1 = element.className.split(" ");
      arr2 = name.split(" ");
      for (i = 0; i < arr2.length; i++) {
        while (arr1.indexOf(arr2[i]) > -1) {
          arr1.splice(arr1.indexOf(arr2[i]), 1);
        }
      }
      element.className = arr1.join(" ");
    }
    
    // Add active class to the current control button (highlight it)
    var btnContainer = document.getElementById("myBtnContainer");
    var btns = btnContainer.getElementsByClassName("btn");
    for (var i = 0; i < btns.length; i++) {
      btns[i].addEventListener("click", function() {
        var current = document.getElementsByClassName("active");
        current[0].className = current[0].className.replace(" active", "");
        this.className += " active";
      });
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search