带有引导程序的 JavaScript 表过滤器

Posted

技术标签:

【中文标题】带有引导程序的 JavaScript 表过滤器【英文标题】:JavaScript table filters with bootstrap 【发布时间】:2020-03-08 01:58:45 【问题描述】:

您好,我的表格过滤器有问题,它们可以工作,但是当我输入例如 John 并且有 3 个 Johns 时,我在表格之间出现了一些空白。我认为这是因为我没有使用 foreach 来正确显示我的信息。如果你用 theta 的名字写,是否有可能获得关于它下面所有 tbody 信息的信息?

$(document).ready(function()
  $("#myInput").on("keyup", function() 
    var value = $(this).val().toLowerCase();
    $("#myTable tr").filter(function() 
      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    );
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
	
        <div class="container-bg"></div>


            <div class="col-lg-6 col-md-12">
				<div id="content" class="content-padding">
                    <div class="content">
					<input class="form-control" id="myInput" type="text" placeholder="Meklēt..">

							<table id="myTable" class="table table-sm table-bordered table-hover">
							<thead class="bg-primary">
    <tr>
      <th colspan="6">Title</th>
    </tr>
  </thead>
  <tbody id="myTable">

								<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">John Johnson</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
	</tbody>
  
  							<thead class="bg-primary">
    <tr>
      <th colspan="6">Title 2</th>
    </tr>
  </thead>
  <tbody id="myTable">

								<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Greg Buchanek</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
	</tbody>
  
  							<thead class="bg-primary">
    <tr>
      <th colspan="6">Title 3</th>
    </tr>
  </thead>
  <tbody id="myTable">

								<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Kavin JP Morgan</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
                	<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Esmeralda Dupond</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
                	<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Andrew JoShnson</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
	</tbody>
</table>	

                    </div>
                </div>
            </div>
	<?php get_sidebar('right'); ?>	
    </div>

我的 PHP foreach 循环代码:

<div class="row">

            <div class="container-bg"></div>

                <?php get_sidebar(); ?>
                <div class="col-lg-6 col-md-12">
                    <div id="content" class="content-padding">
                        <div class="content">
                        <input class="form-control" id="myInput" type="text" placeholder="Meklēt..">

                                <?php foreach ($division as $obj_1)  ?>
                                <table id="myTable" class="table table-sm table-bordered table-hover">
                                <thead class="bg-primary">
        <tr>
          <th colspan="6"><?php echo $obj_1->title ?></th>
        </tr>
      </thead>
      <tbody id="myTable">
      <?php foreach ($result as $obj)  ?>
                                <?php if( $obj_1->id ==  $obj->division) ?>
                                    <tr>
                                        <td class="p-sm-3"><?php echo $obj->position ?></td>
                                        <td class="p-sm-2"><?php echo $obj->first_name." ".$obj->surname ?></td>
                                        <td class="p-sm-1"><?php echo $obj->phone ?></td>
                                        <td class="p-sm-1"><?php echo $obj->mobile ?></td>
                                        <td class="p-sm-1"><?php echo $obj->email ?></td>
                                        <td class="p-sm-1"><?php echo $obj->location ?></td>
                                    </tr>
                                <?php ?>
        <?php ?>
        </tbody>
    </table>    
            <?php ?>
                        </div>
                    </div>
                </div>
        <?php get_sidebar('right'); ?>  
        </div>

This is how it looks on my website with foreach loops

【问题讨论】:

【参考方案1】:

请尝试此代码,它可以正常工作。

$(document).ready(function()
  $("#myInput").on("keyup", function() 
    var value = $(this).val().toLowerCase();
    $("#myTable tbody tr").filter(function() 
      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    );
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
	
        <div class="container-bg"></div>


            <div class="col-lg-6 col-md-12">
				<div id="content" class="content-padding">
                    <div class="content">
					<input class="form-control" id="myInput" type="text" placeholder="Meklēt..">

							<table id="myTable" class="table table-sm table-bordered table-hover">
							<thead class="bg-primary">
    <tr>
      <th colspan="6">Title 1</th>
    </tr>
  </thead>
  <tbody id="myTable">

								<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">John Johnson</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test a</td>
								</tr>
	</tbody>
  
  							<thead class="bg-primary">
    <tr>
      <th colspan="6">Title 2</th>
    </tr>
  </thead>
  <tbody id="myTable">

								<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Greg Buchanek</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test a</td>
								</tr>
	</tbody>
  
  							<thead class="bg-primary">
    <tr>
      <th colspan="6">Title 3</th>
    </tr>
  </thead>
  <tbody id="myTable">

								<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Kavin JP Morgan</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
                	<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Esmeralda Dupond</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test 3</td>
								</tr>
                	<tr>
									<td class="p-sm-3">CEO</td>
									<td class="p-sm-2">Andrew JoShnson</td>
									<td class="p-sm-1">test</td>
									<td class="p-sm-1">test 1</td>
									<td class="p-sm-1">test 2</td>
									<td class="p-sm-1">test a</td>
								</tr>
	</tbody>
</table>	

                    </div>
                </div>
            </div>
	<?php get_sidebar('right'); ?>	
    </div>

注意:- 在上面的代码中,三个不同的标题 1-2-3 给出。如果你搜索测试然后给出不同的输出匹配值。

希望以上代码对你有用。

谢谢。

【讨论】:

感谢重播。但是您的代码与我的代码有何不同?都是一样的,很抱歉,但这并不能解决我的问题。 我不明白你想在你的桌子上做什么。请再解释一下。 是的,我的问题是我没有很好地解释我想要做什么。首先,我想做的是,当我在搜索框中写例如 John 时,它会向我显示带有 John 信息和 thead 的 table tr,但在我的表中我有 20 个不同的 thead,所以它总是会显示所有的 thead,而不仅仅是我需要的那个. 是的,这就是我所说的问题,你可以看到它显示了所有的thead元素,而不是你搜索的那个。

以上是关于带有引导程序的 JavaScript 表过滤器的主要内容,如果未能解决你的问题,请参考以下文章

带有引导程序 vue 的可拖动表

将参数从带有分页的元素列表传递给引导模式

如何在单击引导模式时获取引导表行值

引导表过滤不起作用

Vuejs 和引导程序。有条件地禁用按钮组中的按钮

带有滚动正文的引导固定表头