【问题标题】:How to except button from being filtered?如何排除按钮被过滤?
【发布时间】:2020-01-06 23:20:42
【问题描述】:

在我的代码中,有用于过滤搜索结果的 table 和 index=text 元素。它运作良好,如果用户键入“foo”,则保留有“foo”的表行,其他行被 keyup 隐藏。 但问题是,如果我搜索“编辑”或“删除”,因为它也在表格行中,所以过滤器不起作用。我如何从过滤器中排除那些按钮?

我尝试为每个表格数据提供 id 或 class 以分隔按钮和其他行,但如果我这样做,结果是文本而不是表格(看起来很糟糕)。

'''html

<tbody id="EL">
    @foreach($detail as $event)
    <tr>
        <td class="td">{{ $event->id }}</td>
        <td class="td">{{ $event->your_name }}</td>
        <td class="td">{{ $event->email }}</td>
        <td class="td"><a href="{{ route('participants.create', $event->id) }}"
            data-toggle="tooltip" data-html="true" title="
                {{ $event->participants->pluck('date', 'name') }}<br>
            "> {{ $event->title }} </a></td>
        <td class="td">{{ $event->location }}</td>
        <td class="td">{{ $event->description }}</td>
        <td class="td">{{ $event->date }}</td>
        <td>
            <a href="{{ route('events.edit', $event) }}" class="btn btn-primary">Edit</a>
        </td>
        <td>
            <form action="{{ route('events.destroy', $event->id) }}" method="post">
                @csrf
                @method('DELETE')
                <button class="btn btn-danger" type="submit" name="btn">Delete</button>
            </form>
        </td>
    </tr>
    @endforeach
</tbody>

'''

'''javascript

function filterItem(self){
    $(document).ready(function(){
        $("#Input").on("keyup", function(){
            var value = $(this).val().toLowerCase();
            // $("#EL tr").filter(function() {
            $("#EL td").filter(function() {
                $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
            });
        });
    });
}

'''

即使我搜索编辑或删除,过滤器仍然有效。如果行的内容有编辑或删除,它应该保留在结果中。 提前谢谢!

【问题讨论】:

    标签: jquery laravel-blade


    【解决方案1】:

    也许像这样使用has() 来检查它当前的&lt;td&gt; 有一个&lt;button&gt; 元素可以做到这一点。

    $(document).ready(function() {
      $("#Input").on("keyup", function() {
        var value = $(this).val().toLowerCase();
        let x = $("table td").filter(function() {
          $(this).toggle($(this).has('button').length > 0 ? true : $(this).text().toLowerCase().indexOf(value) > -1)
        });
      });
    });
    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <input id="Input" />
    <table>
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Age</th>
        <th>Button</th>
      </tr>
      <tr>
        <td>Jill</td>
        <td>Delete</td>
        <td>50</td>
        <td><button class="btn btn-danger" type="submit" name="btn">Delete</button></td>
      </tr>
      <tr>
        <td>Eve</td>
        <td>Jackson</td>
        <td>94</td>
        <td><button class="btn btn-danger" type="submit" name="btn">Delete</button></td>
      </tr>
    </table>

    【讨论】:

    • 感谢您的友好评论:)但是如果我在您的代码中搜索“删除”,仍然有结果:(我想要做的就像“吉尔史密斯”是“吉尔删除” ,然后我搜索“删除”,结果中只剩下第一行。
    • 真的很抱歉,但是当我输入'delete'时,我想显示的结果就是{ Jill Delete 50 [Delete] }这一行。此代码显示 Delete [Delete] [Delete] ; (
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2016-01-05
    相关资源
    最近更新 更多