4

当有这样的代码时:

$elements.filter(() => {
    console.log(this); // will be the parent scope's "this"
});

您无法获取应过滤的元素。所以你需要使用一个普通的函数,比如:

$elements.filter(function(){
    console.log($(this)); // will be the element to filter
});

除了使用普通功能还有其他方法吗?我知道你可以使用 click 事件event.currentTarget,但在filter.

4

1 回答 1

10

虽然您没有获得对 expected 的引用this,但可以按以下顺序使用匿名函数、索引和 DOM 节点提供的参数:

$elements.filter((index, node) => {
  console.log(node);
});

let $elements = $('li');

$elements.filter((index, node) => {
  console.log(node);
});
li {
  width: 50%;
  border: 2px solid #000;
}
li.red {
  border-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="red"></li>
  <li class="red"></li>
  <li class="red"></li>
  <li class="red"></li>
  <li></li>
  <li class="red"></li>
  <li class="red"></li>
  <li></li>
  <li class="red"></li>
  <li></li>
  <li class="red"></li>
  <li class="red"></li>
  <li class="red"></li>
  <li class="red"></li>
  <li></li>
  <li></li>
  <li class="red"></li>
  <li class="red"></li>
  <li class="red"></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

JS 小提琴演示

于 2016-03-15T11:52:02.450 回答