# .slice()

所属分类：遍历 > 过滤 英文文档：.slice()

## .slice( start [, end ] )返回: jQuery

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

- #### 添加的版本: 1.1.4.slice( start [, end ] )

  - start
    类型: Integer
    一个整数，从 0 开始计数的下标。代表将要被选择的元素的起始下标。如果指定的下标是一个负数，那么代表从末尾开始计数。
  - end
    类型: Integer
    一个整数，从 0 开始计数的下标。代表将要被选择的元素的结束下标。如果指定的下标是一个负数，那么代表从末尾开始计数。如果忽略此参数，则选择的范围是从 start 开始，一直到最后。

如果提供的jQuery代表了一组DOM元素，`.slice()`方法从匹配元素的子集中构造一个新的jQuery对象。所提供的`start`索引标识的设置一个集合中的元素的位置;如果`end`被省略，这个元素之后的所有元素将包含在结果中。

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

1 2 3 4 5 6 7 |
    <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>

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

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

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

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

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

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

#### Negative Indices（负指数）

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

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

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

## 例子:

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
    <!DOCTYPE html><html><head>  <style>  div { width:40px; height:40px; margin:10px; float:left;        border:2px solid blue; }  span { color:red; font-weight:bold; }  button { margin:5px; }  </style>  <script src="https://code.jquery.com/jquery-latest.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>

#### Demo:

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

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

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

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

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

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

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

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

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

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