Sergiu
Sergiu

Reputation: 376

Search <div> for text using, javasccript

I don't know javascript but I want to use, search on my site. I found a good example on stackoverflow link I joined all the parts and received the following code:

function SearchName() {
  var input = document.getElementById("Search");
  var filter = input.value.toLowerCase();
  var nodes = document.getElementsByClassName('target');
  var card = document.getElementsByClassName('card');

  for (i = 0; i < nodes.length; i++) {
    if (nodes[i].innerText.toLowerCase().includes(filter)) {
      card[i].style.display = "block";
    } else {
      card[i].style.display = "none";
    }
  }
} 
<input id="Search" onkeyup="SearchName();" class="form-control dsh191" type="text" placeholder="search" name="" />


<div class="d-flex m-0 p-0">
    <div class="card">
        <a href="#" class="dsh192 target">Abc Def</a>
        <p class="dsh185">Code: <span class="code">1234</span></p>
    </div>

    <div class="card">
        <a href="#" class="dsh192 target">Qwr Tyu</a>
        <p class="dsh185">Code: <span class="code">5678</span></p>
    </div>

    <div class="card">
        <a href="#" class="dsh192 target">Iop Klj</a>
        <p class="dsh185">Code: <span class="code">9000</span></p>
    </div>
</div>

Everything works fine, but I need to search by class = 'code'. My question is: How do I search for <a href="#" class="dsh192 target">Qwr Tyu</a> and <p class="dsh185">Code: <span class="code">5678</span></p> ? What did I try? I duplicated javascript function code and changed the class from target to code, but nothing was received, now the search goes after the first function in the input.

function SearchName() {
  var input = document.getElementById("Search");
  var filter = input.value.toLowerCase();
  var nodes = document.getElementsByClassName('target');
  var card = document.getElementsByClassName('card');

  for (i = 0; i < nodes.length; i++) {
    if (nodes[i].innerText.toLowerCase().includes(filter)) {
      card[i].style.display = "block";
    } else {
      card[i].style.display = "none";
    }
  }
} 

  function SearchCode() {
  var input = document.getElementById("Search");
  var filter = input.value.toLowerCase();
  var code = document.getElementsByClassName('code');
  var profilecard = document.getElementsByClassName('card');

  for (i = 0; i < code.length; i++) {
    if (code[i].innerText.toLowerCase().includes(filter)) {
      profilecard[i].style.display = "block";
    } else {
      profilecard[i].style.display = "none";
    }
  }
} 
<input id="Search" onkeyup="SearchName(); SearchCode();" class="form-control dsh191" type="text" placeholder="search" name="" />


<div class="d-flex m-0 p-0">
    <div class="card">
        <a href="#" class="dsh192 target">Abc Def</a>
        <p class="dsh185">Code: <span class="code">1234</span></p>
    </div>

    <div class="card">
        <a href="#" class="dsh192 target">Qwr Tyu</a>
        <p class="dsh185">Code: <span class="code">5678</span></p>
    </div>

    <div class="card">
        <a href="#" class="dsh192 target">Iop Klj</a>
        <p class="dsh185">Code: <span class="code">9000</span></p>
    </div>
</div>

My question: How can I search the site after 2 html tags (Search by text in tags)?

Any idea how I can change the code, or where I went wrong etc ... Thanks

Upvotes: 0

Views: 107

Answers (1)

jeremy-denis
jeremy-denis

Reputation: 6878

one idea can be to use innerText on parent tag profileCard

function SearchName() {
  var input = document.getElementById("Search");
  var filter = input.value.toLowerCase();
  var nodes = document.getElementsByClassName('target');
  var card = document.getElementsByClassName('card');

  for (i = 0; i < nodes.length; i++) {
    if (nodes[i].innerText.toLowerCase().includes(filter)) {
      card[i].style.display = "block";
    } else {
      card[i].style.display = "none";
    }
  }
} 

  function SearchCode() {
  var input = document.getElementById("Search");
  var filter = input.value.toLowerCase();
  var code = document.getElementsByClassName('code');
  var profilecard = document.getElementsByClassName('card');

  for (i = 0; i < code.length; i++) {
    if (profilecard[i].innerText.toLowerCase().includes(filter))                         {
      profilecard[i].style.display = 'block';
    } else {
      profilecard[i].style.display = 'none';
    }
  }
} 
<input id="Search" onkeyup="SearchName(); SearchCode();" class="form-control dsh191" type="text" placeholder="search" name="" />


<div class="d-flex m-0 p-0">
    <div class="card">
        <a href="#" class="dsh192 target">Abc Def</a>
        <p class="dsh185">Code: <span class="code">1234</span></p>
    </div>

    <div class="card">
        <a href="#" class="dsh192 target">Qwr Tyu</a>
        <p class="dsh185">Code: <span class="code">5678</span></p>
    </div>

    <div class="card">
        <a href="#" class="dsh192 target">Iop Klj</a>
        <p class="dsh185">Code: <span class="code">9000</span></p>
    </div>
</div>

Upvotes: 1

Related Questions