【问题标题】:is it good to cache from .each method?从 .each 方法中缓存好吗?
【发布时间】:2019-06-25 23:25:51
【问题描述】:

我想做这样的事情:

cache = [];
jQuery("#selector1 .class").each(function(index, item) {
    cache.push({'index': index, 'item': item});
});

问题是,如果我稍后console.log 他们,看起来不错,但仍然无法正常工作:jQuery(cache[0].item).fadeOut(); 但不会出现错误消息。 但是既然有对象,我觉得缓存方法本身就不好。因此,我们存储了一个在该 .each 函数中本地给出的对象。当然,该项目总有一天会消失,只剩下它的参考。那么如何存储该对象呢?

【问题讨论】:

  • 很奇怪。理论上这应该有效。让我试试。
  • 而且理论上存储引用不好,因为它后面的对象可以随时释放
  • 您所拥有的应该(并且确实)可以正常工作。然而,这似乎在很大程度上是多余的,因为您已经可以通过索引访问 DOM 中的元素。很少有方法可以让我看到这种增加的复杂性会带来任何有价值的好处。

标签: jquery caching


【解决方案1】:

好的,我刚刚尝试过,并尝试记录存储的item。它以这种方式完美运行:

$(function () {
  var cache = [];
  $("ul li").each(function (index, item) {
    cache.push({'index': index, 'item': item});
  });
  $(cache[0].item).fadeOut();
});
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
</ul>

【讨论】:

  • 实际上这个fadeOut不会在缓存后立即发生,而是稍后发生:)
  • 您可以使用map() 代替each(),但我不认为有任何性能差异,它只是更简洁。
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 2011-06-14
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多