0

I'm trying to implement this normalize() function into my search function to make it accent insensitive, but I don't really understand how to do it. This is how I tried, but it messes up the whole search function. I would be really grateful if anyone could show me how to do this.

    function myFunction() {
      var input, filter, cards, cardContainer, title, i, filt, tit;
      input = document.getElementById("myFilter");
      filter = input.value.toUpperCase();
      filt = filter.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
      cardContainer = document.getElementById("myItems");
      cards = cardContainer.getElementsByClassName("col-md-4");

      for (i = 0; i < cards.length; i++) {
        title = cards[i].querySelector(".card-body");
        tit = title.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
        if (tit.innerText.toUpperCase().indexOf(filt) > -1) {
          cards[i].style.display = "";

        } else {
          cards[i].style.display = "none";

        }
      }
    }

The working accent sensitive version:

    function myFunction() {
      var input, filter, cards, cardContainer, title, i;
      input = document.getElementById("myFilter");
      filter = input.value.toUpperCase();
      cardContainer = document.getElementById("myItems");
      cards = cardContainer.getElementsByClassName("col-md-4");

      for (i = 0; i < cards.length; i++) {
        title = cards[i].querySelector(".card-body");
        if (title.innerText.toUpperCase().indexOf(filter) > -1) {
          cards[i].style.display = "";

        } else {
          cards[i].style.display = "none";

        }
      }
    }

and an example for the html I want to search in:

 <div class="col-md-4">
                <div class="card card-profile" style="min-height: 386px;" id="268">
                  <div class="card-avatar">
                    <a href="#">
                      <img class="img" src="assets/img/faces/avatar.png" />
                    </a>
                  </div>
                  <div class="card-body">
                    <div class="card-top">
                      <h4 class="card-category text-gray"><b>ááá</b><br>
                        <span style="color: black;">úú</span><br>
                        <span style="color: black;" ></span>
                        blabla</h4>
                    </div>
                    <hr>
                    <h5 class="card-description">
                      <i class="material-icons md-18">
                        mobile_friendly
                      </i>
                      <b>tel.:</b> <a href="tel:06301212121">06301212121</a>
                    </h5>

                    <div class="card-header" role="tab" id="heading268">
                      <h5 class="mb-0">
                        <div class="col text-center">
                          <a class="btn btn-dark" style="width: 100%;" data-toggle="collapse" data-parent="#accordion" href="#collapse268" aria-expanded="false" aria-controls="collapse268">Részletek<i class="material-icons">
                              keyboard_arrow_down
                            </i></a>
                        </div>
                      </h5>
                    </div>
                    <div id="collapse268" class="collapse" role="tabpanel" aria-labelledby="heading268">

                      <h5 class="card-description"  style='display: none';>
                        <i class="material-icons">
                          mobile_friendly
                        </i>
                        <b>tel2.:</b> <a href="tel:"></a>
                      </h5>
                      <h5 class="card-description">
                        <b> Leírás:</b>
                        leírás teszt                    </div>
                    </h5>
                    </div>
                  </div>
                </div>
              </div>
admin
  • 39
  • 8

1 Answers1

0

Here's the solution:

function myFunction() {
      var input, filter, cards, cardContainer, title, i;
      input = document.getElementById("myFilter");
      filter = input.value.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
      cardContainer = document.getElementById("myItems");
      cards = cardContainer.getElementsByClassName("col-md-4");

      for (i = 0; i < cards.length; i++) {
        title = cards[i].querySelector(".card-body");
        if (title.innerText.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").indexOf(filter) > -1) {
          cards[i].style.display = "";
        } else {
          cards[i].style.display = "none";
        }
      }
}
admin
  • 39
  • 8