>

잘 작동하는 자바 스크립트 검색 기능이 있습니다. 그러나 표의 첫 번째td만 검색하고 다른 것은 검색하지 않습니다. tr

에서만 작동하는 것으로 보입니다.

전체 코드 :

PHP :

출력을 표시 할 테이블 만들기

   echo '<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names..">';
    echo '<div class="table-responsive">';
    echo '<table id="myTable"><tr bgcolor="#cccccc"><td>Name</td><td>Department</td><td>E-Mail Address</td><td>Office Phone</td><td>Mobile</td></tr>';

검색에서 반환 된 각 계정에 대해

   for ($x=0; $x<$entries['count']; $x++){

Active Directory에서 값 검색

이름

       $LDAP_FirstName = "";
        if (!empty($entries[$x]['givenname'][0])) {
            $LDAP_FirstName = $entries[$x]['givenname'][0];
            if ($LDAP_FirstName == "NULL"){
                $LDAP_FirstName = "";
            }
        }

       $LDAP_LastName = "";
        if (!empty($entries[$x]['sn'][0])) {
            $LDAP_LastName = $entries[$x]['sn'][0];
            if ($LDAP_LastName == "NULL"){
                $LDAP_LastName = "";
            }
        }

부서

       $LDAP_Department = "";
        if (!empty($entries[$x]['department'][0])) {
            $LDAP_Department = $entries[$x]['department'][0];
            if ($LDAP_Department == "NULL"){
                $LDAP_Department = "";
            }
        }

이메일 주소

       $LDAP_InternetAddress = "";
        if (!empty($entries[$x]['mail'][0])) {
            $LDAP_InternetAddress = $entries[$x]['mail'][0];    
            if ($LDAP_InternetAddress == "NULL"){
                $LDAP_InternetAddress = "";
            }
        }

아이폰

       $LDAP_OfficePhone = "";
        if (!empty($entries[$x]['ipphone'][0])) {
            $LDAP_OfficePhone = $entries[$x]['ipphone'][0];
            if ($LDAP_OfficePhone == "NULL"){
                $LDAP_OfficePhone = "";
            }
        }

휴대 전화 번호

       $LDAP_CellPhone = "";
        if (!empty($entries[$x]['mobile'][0])) {
            $LDAP_CellPhone = $entries[$x]['mobile'][0];
            if ($LDAP_CellPhone == "NULL"){
                $LDAP_CellPhone = "";
            }
        }

테이블 채우기

       echo "<tr><td>".$LDAP_FirstName." " .$LDAP_LastName."</td><td>".$LDAP_Department."</td><td><a class='one' href='mailto:" .$LDAP_InternetAddress. "'>" .$LDAP_InternetAddress."</td><td>".$LDAP_OfficePhone."</td><td>".$LDAP_CellPhone."</td><tr>";

      } //END for loop
    } //END FALSE !== $result
ldap_unbind($ldap_connection); // Clean up after ourselves.
echo("</table>");
echo("</div>"); 
} //END ldap_bind

자바 스크립트 :

function myFunction() {
// Declare variables 
var input, filter, table, tr, td, i;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 1; i < tr.length; i++) {
  td = tr[i].getElementsByTagName("td")[0];
     if (td) {
       if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
         tr[i].style.display = "";
       } else {
         tr[i].style.display = "none";
       }
     } 
   }
 }

전체 코드로 업데이트되었습니다. 감사합니다

  • 답변 # 1

    아마도 이렇게하고 싶을 것입니다. 테이블 구조를 약간 업데이트하고 (본문과 머리를 분리) 가시성 변경을 위해 인라인 스타일 대신 클래스를 사용했습니다.

    HTMLTableElement는 dom 객체 ( tBodies )에 들어가기위한 몇 가지 유용한 타임 세이버를 가지고 있습니다. rows ). 이 방법을 사용하여 테이블에 액세스하면 Object.keys() 를 사용할 수 있습니다  내가 여기 또는 표준 for ...in  루프를 반복하고 조건을 확인하십시오.

    일반적으로 재검색은 재설정으로 간주되므로 기본적으로 모든 것이 보이지 않게하고 일치하는 항목 만 표시합니다. 이렇게하면 다른 코드가 없어도 코드가 정리됩니다.

    검색을 쉽게 보여주기 위해 표의 첫 번째 td에 숫자를 추가했습니다.

    function myFunction() {
      let rows = document.getElementById('myTable').tBodies[0].rows;
      Object.keys(rows).forEach(key => {
        rows[key].classList.add('filter');
        const input = document.getElementById('myInput').value.toUpperCase();
        const current = rows[key].cells[0].innerText.toUpperCase()
        if (current.indexOf(input) > -1) {
          rows[key].classList.remove('filter');
        }
      });
    }
    
    

    .filter { display: none; }
    
    

    <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names..">
    <div class="table-responsive">
    <table id="myTable">
      <thead>
        <tr>
          <th>Name</th>
          <th>Department</th>
          <th>E-Mail Address</th>
          <th>Office Phone</th>
          <th>Mobile</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>search1</td></td><td>Department</td><td>E-Mail Address</td><td>Office Phone</td><td>Mobile</td>
        </tr>
        <tr>
          <td>search2</td></td><td>Department</td><td>E-Mail Address</td><td>Office Phone</td><td>Mobile</td>
        </tr>
        <tr>
          <td>search3</td></td><td>Department</td><td>E-Mail Address</td><td>Office Phone</td><td>Mobile</td>
        </tr>
        <tr>
          <td>search4</td></td><td>Department</td><td>E-Mail Address</td><td>Office Phone</td><td>Mobile</td>
        </tr>
        <tr>
          <td>search5</td></td><td>Department</td><td>E-Mail Address</td><td>Office Phone</td><td>Mobile</td>
        </tr>
      </tbody>
    </table>
    
    

  • 답변 # 2

    내부에 추가해야합니다. 다음 td에 대한 첫 번째 'for'및 다음 tr에 대한 다른 'for'.

관련 자료

  • 이전 VBA code calling a stored proc - 스토어드 프로 시저를 호출하는 vba 코드 - 레코드가 반환되지 않으면 메시지 상자 표시
  • 다음 sql server - from 절의 하위 쿼리 끝에서 임의 문자의 중요성 - sql
  • 관련 질문