搜索列表中的元素

时间:2017-02-13 09:49:56

标签: javascript php jquery html

我有一个带有两个切换列表的排行榜。当我按周计分卡时 - 显示每周列表,当我按总计记分卡时,显示整体。 仅供参考,它有点像这样:https://jsfiddle.net/pvwvdgLn/1/

我的名单有1000名员工。

问题在于,此处用于搜索列表中员工的搜索框不起作用。 我正试图找到一种方法来搜索列表中的员工。

以下是我的排行榜的图片: pic for the leader board

我正在回复我的DB中的排行榜中的列表,因此链接会不断变化,因为这就是排行榜应该是这样的。

php涉及排行榜:



<div class="tab-content">
    <div id="weeklylb" class="leadboardcontent">
        <div class="leaderboard" id="leaderboard">
        <ol id = "myOL">
        <mark>
        <?php
            $sql11 = "SELECT *
            FROM pointsBadgeTable
            WHERE WeekNumber ='week04'
            ORDER BY pointsRewarded desc";

           if(($stmt1221 = sqlsrv_query($conn, $sql11)) != false){
             do {
               while ($row1221 = sqlsrv_fetch_array($stmt1221, SQLSRV_FETCH_ASSOC)) {
                 $resultt[] = $row1221;
               }
             } while (sqlsrv_next_result($stmt1221));
             foreach($resultt as $row1221){
               // echo '<li><mark data-id="'.$row1221['EmployeeID'].'">'. $row1221['EmployeeName'].'</mark><small>"'.$row1221['pointsRewarded'].'</small></li>';
               echo  "<li><mark data-id='".$row1221['EmployeeID']."' class='parent-div'><span class='rank'>" . $row1221['rank'] . "</span><span class='name'>" . $row1221['EmployeeName'] . "</span><span class='points'>" . $row1221['pointsRewarded'] . "</span></mark></li>";
               // echo  "<div data-id='".$row1221['EmployeeID']."' class='parent-div'><span class='rank'>" . $row1221['rank'] . "</span><span class='name'>" . $row1221['EmployeeName'] . "</span><span class='points'>" . $row1221['pointsRewarded'] . "</span></div>";
             }
           //  var_dump($resultt);
            } else {
            echo 'sql error';
            }
        ?>
        </mark>
        </ol>
    </div>
    <svg style="display: none;">
    <symbol id="cup" x="0px" y="0px" width="25px" height="26px" viewBox="0 0 25 26" enable-background="new 0 0 25 26" xml:space="preserve">
    <path fill="#F26856" d="M21.215,1.428c-0.744,0-1.438,0.213-2.024,0.579V0.865c0-0.478-0.394-0.865-0.88-0.865H6.69
														C6.204,0,5.81,0.387,5.81,0.865v1.142C5.224,1.641,4.53,1.428,3.785,1.428C1.698,1.428,0,3.097,0,5.148
														C0,7.2,1.698,8.869,3.785,8.869h1.453c0.315,0,0.572,0.252,0.572,0.562c0,0.311-0.257,0.563-0.572,0.563
														c-0.486,0-0.88,0.388-0.88,0.865c0,0.478,0.395,0.865,0.88,0.865c0.421,0,0.816-0.111,1.158-0.303
														c0.318,0.865,0.761,1.647,1.318,2.31c0.686,0.814,1.515,1.425,2.433,1.808c-0.04,0.487-0.154,1.349-0.481,2.191
														c-0.591,1.519-1.564,2.257-2.975,2.257H5.238c-0.486,0-0.88,0.388-0.88,0.865v4.283c0,0.478,0.395,0.865,0.88,0.865h14.525
														c0.485,0,0.88-0.388,0.88-0.865v-4.283c0-0.478-0.395-0.865-0.88-0.865h-1.452c-1.411,0-2.385-0.738-2.975-2.257
														c-0.328-0.843-0.441-1.704-0.482-2.191c0.918-0.383,1.748-0.993,2.434-1.808c0.557-0.663,1-1.445,1.318-2.31
														c0.342,0.192,0.736,0.303,1.157,0.303c0.486,0,0.88-0.387,0.88-0.865c0-0.478-0.394-0.865-0.88-0.865
														c-0.315,0-0.572-0.252-0.572-0.563c0-0.31,0.257-0.562,0.572-0.562h1.452C23.303,8.869,25,7.2,25,5.148
														C25,3.097,23.303,1.428,21.215,1.428z M5.238,7.138H3.785c-1.116,0-2.024-0.893-2.024-1.99c0-1.097,0.908-1.99,2.024-1.99
														c1.117,0,2.025,0.893,2.025,1.99v2.06C5.627,7.163,5.435,7.138,5.238,7.138z M18.883,21.717v2.553H6.118v-2.553H18.883
														L18.883,21.717z M13.673,18.301c0.248,0.65,0.566,1.214,0.947,1.686h-4.24c0.381-0.472,0.699-1.035,0.947-1.686
														c0.33-0.865,0.479-1.723,0.545-2.327c0.207,0.021,0.416,0.033,0.627,0.033c0.211,0,0.42-0.013,0.627-0.033
														C13.195,16.578,13.344,17.436,13.673,18.301z M12.5,14.276c-2.856,0-4.93-2.638-4.93-6.273V1.73h9.859v6.273
														C17.43,11.638,15.357,14.276,12.5,14.276z M21.215,7.138h-1.452c-0.197,0-0.39,0.024-0.572,0.07v-2.06
														c0-1.097,0.908-1.99,2.024-1.99c1.117,0,2.025,0.893,2.025,1.99C23.241,6.246,22.333,7.138,21.215,7.138z" />
</div>
        <!-- weekly div ends -->
<div id="overalllb" class="leadboardcontent" style="display:none">

<div class="leaderboard" id="leaderboard">
<ol id = "myOL">

 <mark>

   <?php
   $q4 = "select *
   from EmployeeTable
   order by Total_points_Rewarded desc";

if(($stmt33 = sqlsrv_query($conn, $q4)) != false){
 do {
   while ($row333 = sqlsrv_fetch_array($stmt33, SQLSRV_FETCH_ASSOC)) {
     $resulttt[] = $row333;
   }
 } while (sqlsrv_next_result($stmt33));
 foreach($resulttt as $row333){
   // echo '<li><mark data-id="'.$row1221['EmployeeID'].'">'. $row1221['EmployeeName'].'</mark><small>"'.$row1221['pointsRewarded'].'</small></li>';
echo  "<li><mark data-id='".$row333['EmployeeID']."' class='parent-div'><span class='rank'>" . $row333['overallRank'] . "</span><span class='name'>" . $row333['EmployeeName'] . "</span><span class='points'>" . $row333['Total_points_Rewarded'] . "</span></mark></li>";
// echo  "<div data-id='".$row1221['EmployeeID']."' class='parent-div'><span class='rank'>" . $row1221['rank'] . "</span><span class='name'>" . $row1221['EmployeeName'] . "</span><span class='points'>" . $row1221['pointsRewarded'] . "</span></div>";
 }
//  var_dump($resultt);
} else {
 echo 'sql error';
}

?>
</mark>
</ol>
  </div>
  <!-- leaderboard div ends here of overall-->

</div>
<!-- overall div ends here -->



</div>
&#13;
&#13;
&#13;

与搜索框关联的

html:

&#13;
&#13;
<div id="search5back">

      <form method="get" action="/search" id="searchbox5">
      <input id="search52" name="q" type="text" size="40" onkeyup="myFunction()" placeholder="Search an Employee ...." />
      </form>

      </div>
&#13;
&#13;
&#13;

我尝试过的Javascript:

&#13;
&#13;
function myFunction() {
  var input, filter, ol, li, a, i;
  input = document.getElementById("search52");
  filter = input.value.toUpperCase();
  ol = document.getElementById("myOL");
  li = ol.getElementsByTagName("li");
  divs=li[0].getElementsByClassName("parent-div");
  for (i = 0; i < divs.length; i++) {
      a = divs[i].getElementsByClassName("name")[0];
      if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
          divs[i].style.display = "";
      } else {
          divs[i].style.display = "none";
      }
  }
}
&#13;
&#13;
&#13;

搜索框需要同时适用于排行榜中的列表。我认为ID为ol的{​​{1}}对于列表都需要有所不同。

1 个答案:

答案 0 :(得分:2)

问题是divs=li[0].getElementsByClassName("parent-div");类parent-div不存在,更多的想法是迭代li mark tag中的文本。

function myFunction() {
      var input, filter, ol, li, a, i;
      input = document.getElementById("search52");
      filter = input.value.toUpperCase();
      if(document.getElementById('overalllb').style.display=="none")
        ol = document.getElementById("myOL");
      else
        ol = document.getElementById("myOLoverAll");
      li = ol.getElementsByTagName("li");

      for (i = 0; i < li.length; i++) {
          a = li[i].getElementsByTagName("mark")[0];
          if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
              li[i].style.display = "";
          } else {
              li[i].style.display = "none";
          }
      }
    }

对于标签中的单个搜索,您需要为ol提供不同的ID,并检查myFunction()中哪些处于活动状态;

演示:https://jsfiddle.net/pvwvdgLn/3/