javascript - 将不同的 DOM 元素隐藏到通过 jquery 过滤的元素

标签 javascript jquery html css

如果在 p.skills-list 中找不到输入,我有这个脚本(应该)隐藏整个 div.candidate-single分区因此,脚本仅搜索 p.skills-list 元素,如果未找到该文本,则应隐藏 .candidate-single。这是脚本和相关的 html。

我遇到的问题是,如果找不到搜索字符串 (#candidate-skills),我无法隐藏整个 .candidate-single,它只会隐藏 strong.skills-list

$(document).ready(function() {
    // sets event listener
  $("#candidate-skills").keyup(function() {

      //creates variables
    var searchTerm = $("#candidate-skills").val();
    var listItem = $('.skills-list');
    var searchSplit = searchTerm.replace(/ /g, "'):containsi('")

    console.log(searchSplit);
    console.log(listItem);

      //extends :contains to be case insensitive
  $.extend($.expr[':'], {
  'containsi': function(elem, i, match, array)
  {
    return (elem.textContent || elem.innerText || '').toLowerCase()
    .indexOf((match[3] || "").toLowerCase()) >= 0;
  }
});

    // does the hiding of stuff etc

    // this one hides the ones that aren't relavent
    $(".skills-list").not(":containsi('" + searchSplit + "')").each(function(e)   {
      $(this).addClass('is-hidden');
      setTimeout(function() {
          $('.candidate-single').addClass('is-hidden');
        }, 1);
    });

      // makes sure the correct ones are shown
    $(".skills-list:containsi('" + searchSplit + "')").each(function(e) {
      $(this).removeClass('is-hidden');
      setTimeout(function() {
          $(".candidate-single").removeClass('is-hidden');
        }, 1);
    });
  });
});

示例列表项 HTML

<div class="col-md-4 form-group">
                        <label>Core Skills: </label></br>
                        <input type="text" id="candidate-skills" class="candidate-input form-control">
                        </div>   
<div class="row">
    <div class="panel panel-default candidate-single">
    <h6>PHP Developer</h6>
    <p>Location: Everywhere</p>
    <p>Core Skills: <strong class="skills-list">PHP, python, c#, html</strong></p>
    </div>
    </div>

最佳答案

您隐藏和显示所有候选者,而不是与每个循环相关的候选者。试试这个:

// this one hides the ones that aren't relavent
$(".skills-list").not(":containsi('" + searchSplit + "')").each(function(e) {
  var $skillsList = $(this);
  $skillsList.addClass('is-hidden');
  setTimeout(function() {
    $skillsList.closest('.candidate-single').addClass('is-hidden'); // gets the closest parent to the skills list
  }, 1);
});

// makes sure the correct ones are shown
$(".skills-list:containsi('" + searchSplit + "')").each(function(e) {  
  var $skillsList = $(this);
  $skillsList.removeClass('is-hidden');
  setTimeout(function() {
    $skillsList.closest(".candidate-single").removeClass('is-hidden');
  }, 1);
});

关于javascript - 将不同的 DOM 元素隐藏到通过 jquery 过滤的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48261325/

相关文章:

javascript - 如何使用 jQuery 计算表单输入?

javascript - chart.js 混合图表中的图表之一未绘制

javascript - 如何将 Jquery UI 从图像中的单击委托(delegate)给列表项?

asp.net - ASP.Net 应用程序的最佳菜单是什么?

html - 将 CSS 文件链接到我硬盘上同一目录中的 HTML 文档 (Windows)

jquery - 制作一个带背景的按钮

javascript - 如何在不使用库的情况下在 javascript 中解码 jwt token ?

javascript - 如何将 event.target 作为 Angular 2 中的对象获取?

javascript - 多选,如何将 "disabled"添加到其他多选

javascript - 您应该如何使用 jQuery .on 将上下文传递给命名函数?