.not()

.not( selector )返回类型:jQuery

描述:从匹配的元素集合中删除元素。

  • 增补版本:1.0.not( selector )

    • selector
      类型:Selector or Element or Array
      一个字符串,包含一个选择器表达式,一个DOM元素,或一个元素的数组,用来针对集合作匹配。
  • 增补版本:1.4.not( function )

    • function
      类型:Function( Integer index, Element element ) => Boolean
      一个函数,用作集合中的每个元素的测试。它接受两个参数,indexelement,前者是jQuery集合中元素的索引,后者是DOM元素。在函数内部,this引用当前DOM元素。
  • 增补版本:1.4.not( selection )

    • selection
      类型:jQuery
      一个已有的jQuery对象,匹配所针对的元素的当前集合。

给定一个jQuery对象,代表一个DOM元素集合,.not()方法根据匹配元素的子集构造了一个新jQuery对象。提供的选择器针对每个元素作测试;不匹配选择器的元素才会包含在结果中。

请琢磨一个带有简单列表的网页:

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" ).not( ":even" ).css( "background-color", "red" );

此调用的结果是项2和项4得到红色背景,它们不匹配选择器(再次强调:even:odd使用基于0的索引)。

删除特定元素

.not()方法的第二版允许我们从匹配集合中删除元素,假定我们可以先找到由其它方法产生的元素。例如:假定我们的列表具有一个id,应用于它的一个项:

1
2
3
4
5
6
7
<ul>
<li>list item 1</li>
<li>list item 2</li>
<li id="notli">list item 3</li>
<li>list item 4</li>
<li>list item 5</li>
</ul>

我们可以使用原生的JavaScriptgetElementById()取得第三项,然后从jQuery对象中删除它:

1
2
$( "li" ).not( document.getElementById( "notli" ) )
.css( "background-color", "red" );

此语句改变了项1、2、4、5的颜色。我们可以利用一个更简单的jQuery表达式来实现相同的结果,但是某些时候此技术很有用,例如,在其它库提供了对一个扁平DOM节点的引用的时候。

自从jQuery 1.4以来,.not()方法或以取用一个函数作为它的参数,方式与.filter()相同。这些函数返回true的元素被排除出经筛选的集合;所有其它元素都被保留下来。

注意:如果 .not()传入了一个CSS选择器字符串,在筛选过程中,返回的jQuery对象将始终删除文本和注释节点。如果提供了一个特定的节点或节点的数组,只有当文本或注释节点匹配筛选数组中的一个节点时,jQuery对象才会删除它们。

示例:

把边框添加到非蓝非绿的<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
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>not demo</title>
<style>
div {
width: 50px;
height: 50px;
margin: 10px;
float: left;
background: yellow;
border: 2px solid white;
}
.green {
background: #8f8;
}
.gray {
background: #ccc;
}
#blueone {
background: #99f;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div></div>
<div id="blueone"></div>
<div></div>
<div class="green"></div>
<div class="green"></div>
<div class="gray"></div>
<div></div>
<script>
$( "div" ).not( ".green, #blueone" )
.css( "border-color", "red" );
</script>
</body>
</html>

演示:

从所有段落集合中删除带有id="selected"的元素。

1
$( "p" ).not( $( "#selected" )[ 0 ] );

从所有段落集合中删除带有id="selected"的元素。

1
$( "p" ).not( "#selected" );

从所有段落集合中删除所有匹配"div p.selected"的元素。

1
$( "p" ).not( $( "div p.selected" ) );