Функция поиска для динамических полей ввода - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть динамический родительский класс, и в каждом родительском классе у меня есть более 100 подтестов .. У меня есть складное меню начальной загрузки, где содержимое будет отображаться или скрываться одним нажатием кнопки. У меня есть динамический класс по имени ep-dp-где я ищу поля ввода, если я передаю ep-dp-dt[0], я могу искать только нулевой класс из нескольких под-тестов, аналогично, если я прохожу ep-dp-dt[1], я могу искать только первый класс .... Так какМогу ли я передать динамические значения в getElementsByClassName('ep-dp-dt')[dynamic_value] ???

function myFunction() {
  var input, filter, table, tr, td, i;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  tr = document.getElementsByClassName('ep-dp-dt')[0].getElementsByTagName('tr');
  var i;
  for(var i = 0, length = tr.length; i < length; i++) {
  td = tr[i].getElementsByTagName("td")[1];

  if (td) {
    if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
      tr[i].style.display = "";
    } else {
      tr[i].style.display = "none";
    }
   }  
  }
}

Структура таблицы выглядит так:

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="" title="" class="form-control pull-right">

<table id="collapse1" role="tabpanel" aria-labelledby="heading1" class="table table-bordered table-striped collapse1 collapse in" cellspacing="0" width="100%" aria-describedby="example_info" style="width: 100%; height: auto;">

    <thead>
      <tr class="patientinfo " role="row">
      <th></th>
       <th></th>
      </tr>
   </thead>
   <tbody class="ep-dp-dt">
        <td></td>
        <td></td>
    </tbody>
</table>


<table id="collapse2" role="tabpanel" aria-labelledby="heading2" class="table table-bordered table-striped collapse1 collapse in" cellspacing="0" width="100%" aria-describedby="example_info" style="width: 100%; height: auto;">

    <thead>
      <tr class="patientinfo " role="row">
      <th></th>
       <th></th>
      </tr>
   </thead>
   <tbody class="ep-dp-dt">
        <td></td>
        <td></td>
    </tbody>
</table>

.... и так далее

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете использовать два input элемента, один для скрытия / отображения таблицы на основе индекса, а другой для фактической строки поиска в таблице.

function myFunctionIndex(idx){
  document.querySelectorAll('.ep-dp-dt').forEach(function(el, i){
    if(idx.trim() == "")
      el.parentNode.style.display = "block";
    else if(i != idx)
      el.parentNode.style.display = "none";
    else
      el.parentNode.style.display = "block";
  });
}

function myFunction(el) {
  var input, filter, table, tr, td, i;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  var idxVal = document.getElementById("index");
  tr = document.querySelectorAll('.ep-dp-dt tr');
  for(let i = 0, length = tr.length; i < length; i++) {
    td = tr[i].querySelectorAll("td")[1];
    if (td) {
      if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    }  
  } 
  
}
Table Index: <input type="text" id="index" oninput="myFunctionIndex(this.value)" placeholder="" title="" class="form-control pull-right">
Search By: <input type="text" id="myInput" oninput="myFunction()" placeholder="" title="" class="form-control pull-right">

<table id="collapse1" role="tabpanel" aria-labelledby="heading1" class="table table-bordered table-striped collapse1 collapse in" cellspacing="0" width="100%" aria-describedby="example_info" style="width: 100%; height: auto;">

  <thead>
    <tr class="patientinfo " role="row">
    <th></th>
     <th></th>
    </tr>
  </thead>
  <tbody class="ep-dp-dt">
       <tr>
        <td>first table data 1</td>
        <td>first table data 2</td>
      </tr>
  </tbody>
</table>


<table id="collapse2" role="tabpanel" aria-labelledby="heading2" class="table table-bordered table-striped collapse1 collapse in" cellspacing="0" width="100%" aria-describedby="example_info" style="width: 100%; height: auto;">

  <thead>
    <tr class="patientinfo " role="row">
    <th></th>
     <th></th>
    </tr>
  </thead>
  <tbody class="ep-dp-dt">
      <tr>
        <td>second table data 1</td>
        <td>second table data 2</td>
      </tr>
  </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...