• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • slice()

    根据指定的下标范围,过滤匹配的元素集合,并生成一个新的 jQuery 对象。

  • .slice(start[, end ])
    • start类型: Integer。一个整数,从 0 开始计数的下标。代表将要被选择的元素的起始下标。如果指定的下标是一个负数,那么代表从末尾开始计数。
    • end类型: Integer。一个整数,从 0 开始计数的下标。代表将要被选择的元素的结束下标。如果指定的下标是一个负数,那么代表从末尾开始计数。如果忽略此参数,则选择的范围是从 start 开始,一直到最后。
  • 如果提供的jQuery代表了一组DOM元素,.slice()方法从匹配元素的子集中构造一个新的jQuery对象。所提供的start索引标识的设置一个集合中的元素的位置;如果end被省略,这个元素之后的所有元素将包含在结果中。

    考虑一个页上有一个简单的列表:

    <ul>
      <li>list item 1</li>
      <li>list item 2</li>
      <li>list item 3</li>
      <li>list item 4</li>
      <li>list item 5</li>
    </ul>
    

    我们可以应用此方法到列表集合:

    $('li').slice(2).css('background-color', 'red');
    

    上述代码的执行结果是,第 3,4,5 项列表项的背景色变成了红色。注意,索引是从 0 开始计数的,并且代表的是 jQuery 对象中的元素位置,而不是在 DOM 树中的位置。

    end 参数允许我们进一步限制所选择的元素。例如:

    $('li').slice(2, 4).css('background-color', 'red');
    

    现在,只有第 3 和第 4 项列表项会被选中。索引依然是从 0 开始计数的,但是在被选中的元素中不包括end参数所指定的元素。

    Negative Indices(负索引)

    jQuery的.slice()方法是仿照的JavaScript 数组的.slice()方法。其中的一个功能就是允许传入负的startend参数。如果传递的是负数,那么下标位置是从结尾开始的,而不是从起始位置开始。例如:

    $('li').slice(-2, -1).css('background-color', 'red');
    

    这一次只有项4是变成了红色,因为它是唯一满足条件的列表项,即被选中的元素是从倒数第二个元素(-2)开始到最后一个元素(-1)(不含此元素)之间的元素。

    例子:

    将随机选中的范围内的 div 变成黄色。

    <!DOCTYPE html>
    <html>
    <head>
    <style>
      div {width:40px; height:40px; margin:10px; float:left;border:2px solid blue; }
      span {display:inline-block;margin-left:20px;color:red; font-weight:bold; }
      button { margin:5px; }
      </style>
      <script src="https://www.lanmper.cn/static/js/jquery-3.5.0.js"></script>
    </head>
    <body>
      <p><button>Turn slice yellow</button>
      <span>Click the button!</span></p>
      <div></div>
      <div></div>
     
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
     
      <div></div>
      <div></div>
    <script>
    function colorEm() {
      var $div = $("div");
      var start = Math.floor(Math.random() *
                             $div.length);
      var end = Math.floor(Math.random() *
                           ($div.length - start)) +
                           start + 1;
      if (end == $div.length) end = undefined;
      $div.css("background", "");
      if (end)
        $div.slice(start, end).css("background", "yellow");
       else
        $div.slice(start).css("background", "yellow");
     
      $("span").text('$("div").slice(' + start +
                     (end ? ', ' + end : '') +
                     ').css("background", "yellow");');
    }
     
    $("button").click(colorEm);
    </script>
     
    </body>
    </html>
    

    Click the button!

    假设共有三个段落,选择所有的段落,并进行 slice 操作,选择的范围只包含第一个元素。

    $("p").slice(0, 1).wrapInner("<b></b>");
    

    假设共有三个段落,选择所有的段落,并进行 slice 操作,选择的范围只包含第一个和第二个元素。

    $("p").slice(0, 2).wrapInner("<b></b>");
    

    假设共有三个段落,选择所有的段落,并进行 slice 操作,选择的范围只包含第二个元素。

    $("p").slice(1, 2).wrapInner("<b></b>");
    

    假设共有三个段落,选择所有的段落,并进行 slice 操作,选择的范围只包含第二个和第三个元素。

    $("p").slice(1).wrapInner("<b></b>");
    

    假设共有三个段落,选择所有的段落,并进行 slice 操作,选择的范围只包含第三个元素。

    $("p").slice(-1).wrapInner("<b></b>");
    

    上篇:last()

    下篇:map()