javascript - 这个filterSystem函数有什么问题

标签 javascript jquery

我有一个 slider 过滤器函数,我试图用它来根据一个属性data-length过滤一些文本。这样,当 slider 处于某个值时,它仅显示具有该数据长度值或更小的文本。

这是 slider 和过滤器功能:

var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
output.innerHTML = slider.value;

slider.oninput = function() {
  output.innerHTML = this.value;
}

 function filterSystem() {
   $("em.match.js-match").hide().filter(function () {
     var length = parseInt($(this).attr("data-length"));
     return slider.value <= length;
    }).show();
  }

如果有人能告诉我为什么这个函数filterSystem不能按我想要的方式工作?

here is the example

谢谢!

附:我不想使用 jquery-ui

最佳答案

我发现两个问题:

  1. 您从未调用过filterSystem();

  2. 您没有在项目中包含 jQuery

更新了此内容:

slider.oninput = function() {
  output.innerHTML = this.value;
  filterSystem();
}

工作演示

var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
output.innerHTML = slider.value;

slider.oninput = function() {
  output.innerHTML = this.value;
  filterSystem();
}

function filterSystem() {
  $("em.match.js-match").css({
    'background-color': '#fff',
    'color': '#000'
  }).filter(function() {
    var length = parseInt($(this).attr("data-length"));
    if (slider.value <= length) {
      $(this).css({'background-color': $(this).attr("data-color"), 'color':'#fff'})
    }
  });

}
.slidecontainer {
  width: 100%;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  height: 15px;
  border-radius: 5px;
  background: #d3d3d3;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>Round Range Slider</h1>

<div class="" "slidecontainer">
  <input type="range" min="1" max="100" value="50" class="slider" id="myRange">
  <p>Value: <span id="demo"></span></p>
</div>

<div class="document__body">
  <p xml:id="100">
    <em class="match js-match" data-algorithm="text" data-algorithm-type="text" data-color="#2d2f49" data-id="match_1" data-length="22" data-reference="0" style="background-color: rgb(45, 47, 73); color: rgb(255, 255, 255);">This has 22 characters</em>
  </p>

  <p xml:id="101">
    <em class="match js-match match--active" data-algorithm="text" data-algorithm-type="text" data-color="#009b8b" data-id="match_20" data-length="12" data-reference="0" style="background-color: rgb(0, 155, 139); color: rgb(255, 255, 255);">This only 12</em>
  </p>
</div>

关于javascript - 这个filterSystem函数有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55240831/

相关文章:

javascript - 调整大小时保留元素相对于背景图像的位置

javascript - 为什么 Number ("x") == BigInt ("x") ... 只是有时?

javascript - 如何删除没有id的元素

jquery - 需要在选择 <li> 时更改划分 <li> 的类

javascript - 如何访问隐藏按钮并单击它们

JavaScript:如何从节点中删除标签?

javascript - 使用列生成器将文本包装在单列中

javascript - 在深层目录中导入 ES6 模块

javascript - 根据用户区域设置过滤字符串列表

javascript - 快速输入时 KeyUp 功能不起作用