【问题标题】:Is there any equivalent of jQuery slice() method in Javascript?Javascript中是否有任何等效的jQuery slice() 方法?
【发布时间】:2021-01-18 22:27:11
【问题描述】:

我正在 javascript 中寻找等效的 slice() 方法。用尽可能短的方式在 Javascript 中使用 ES6+ 与此 jQuery 代码行等效的是什么?

$("#myDiv .btn").slice(0,3).addClass("active");
.active {
  background-color: grey;
  color: white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="myDiv">
  <button class="btn">1</button>
  <button class="btn">2</button>
  <button class="btn">3</button>
  <button class="btn">4</button>
  <button class="btn">5</button>
  <button class="btn">6</button>
  <button class="btn">7</button>
</div>

【问题讨论】:

标签: javascript html jquery dom ecmascript-6


【解决方案1】:

也许您想用纯 javascript 实现这个实现?因为.slice是JS中数组的内置方法,参考这个doc

[].slice.call(document.querySelectorAll("#myDiv .btn"), 0, 3).forEach((el) => {
  el.classList.add("active")
})
.active {
  background-color: grey;
  color: white;
}
<div id="myDiv">
  <button class="btn">1</button>
  <button class="btn">2</button>
  <button class="btn">3</button>
  <button class="btn">4</button>
  <button class="btn">5</button>
  <button class="btn">6</button>
  <button class="btn">7</button>
</div>

【讨论】:

  • [...document.querySelectorAll("#myDiv .btn")].slice(0, 3).forEach(el =&gt; el.classList.add("active")) 在我看来更容易阅读
  • @mplungjan 确定是
【解决方案2】:
[...document.querySelectorAll("#myDiv .btn")]
  .slice(0, 3)
  .forEach(el => el.classList.add("active")) 

我认为这里的其他建议更容易阅读

【讨论】:

    【解决方案3】:

    您可以在不使用.slice() 的情况下执行此操作,方法是将选择器修改为使用nth-child()。这将允许您选择第一个 n 元素。要选择多个元素,您可以使用querySelectorAll(),它会返回一个NodeList,然后您可以使用.forEach() 方法对其进行迭代,然后将您的类添加到使用classList.add()

    document.querySelectorAll("#myDiv .btn:nth-child(-n+3)").forEach(
      elem => elem.classList.add("active")
    );
    .active {
      background-color: grey;
      color: white;
    }
    <div id="myDiv">
      <button class="btn">1</button>
      <button class="btn">2</button>
      <button class="btn">3</button>
      <button class="btn">4</button>
      <button class="btn">5</button>
      <button class="btn">6</button>
      <button class="btn">7</button>
    </div>

    【讨论】:

    • 谢谢,连同@mplungjan 的回答,这是最容易阅读和写作的一种。可悲的是,与 jQuery 相比,它对我来说仍然很痛苦。太冗长了:(
    • @SilverSurfer 我想这是使用 jQuery 的优势之一哈哈。也许有一天我们能够以更紧凑的方式编写上面的代码行。如果您需要多次编写,我认为创建一个辅助函数肯定是要走的路。
    猜你喜欢
    • 2015-09-08
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多