.slice()
.slice( start [, end ] )
描述:把匹配的元素集合缩小到一个子集,子集用一个索引范围指定。
给定一个jQuery对象,代表一个DOM元素的集合,.slice()
方法构造了一个新的jQuery对象,包含元素的一个子集,该子集用start
参数指定,视情况还可以用end
参数指定。提供的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" );
这次调用的结果是第三项、第四项和第五项有了红色背景。注意,提供的索引是基于0的,是引用了元素在jQuery对象中的位置,而不是在DOM树中的位置。
end参数允许我们进一步限制选中的范围。举个例子:
$( "li" ).slice( 2, 4 ).css( "background-color", "red" );
现在只有第三项和第四项被选中了。索引依然是基于0的;范围延伸到,但是不包括指定的索引。
负数索引
jQuery的.slice()
方法是仿照JavaScript中用于数组的.slice()
方法。它的功能之一是允许传入负的start
和end
参数。如果提供了负数,就表示一个从集合的末尾开始的位置,而不是从开头开始。For example:
$( "li" ).slice( -2, -1 ).css( "background-color", "red" );
这次只有第四项变红了,因为它是位于倒数第二项-2
和倒数第一项(-1
)之间唯一的项目。
示例
根据一个随机的切片,把div变黄。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>slice demo</title> <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-1.10.2.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>
演示结果
选择所有段落文本,然后切片选区,以只包含第一个元素。
$( "p" ).slice( 0, 1 ).wrapInner( "<b></b>" );
选择所有段落文本,然后切片选区,以只包含第一个和第二个元素:
$( "p" ).slice( 0, 2 ).wrapInner( "<b></b>" );
选择所有段落文本,然后切片选区,以只包含第二个元素。
$( "p" ).slice( 1, 2 ).wrapInner( "<b></b>" );
选择所有段落文本,然后切片选区,以只包含第二个和第三个元素。
$( "p" ).slice( 1 ).wrapInner( "<b></b>" );
选择所有段落文本,然后切片选区,以只包含第三个元素。
$( "p" ).slice( -1 ).wrapInner( "<b></b>" );