jQuery 提供了一套功能强大的工具来匹配文档中的一组元素。
要将任何元字符(例如 !"#$%&’()*+,./:;<=>?@[\]^`{|}~)用作名称的文字部分,必须使用两个反斜杠对它进行转义:\\ 。例如,元素 id=“foo.bar” 可以使用选择器 $("#foo\\.bar")。
基本选择器
-
jQuery( “*” ):选择所有元素。
-
jQuery( “.class” ):选择具有给定类的所有元素。
-
jQuery( “element” ):元素选择器。选择具有给定标签名称的所有元素。
-
jQuery( “#id” ):选择具有给定 id 属性的单个元素。
每个
id
值在文档中只能使用一次。如果为多个元素分配了相同的 ID,则使用该 ID 的查询将仅选择 DOM 中的第一个匹配元素。但是,不应依赖这种行为。如果 id 包含句点或冒号等字符,则必须使用反斜杠对这些字符进行转义。
-
jQuery( “selector1, selector2, selectorN” ):选择所有指定选择器的合并结果。
属性选择器
-
jQuery(" [attribute | =‘value’]"):属性包含前缀选择器。选择具有指定属性的元素,该元素的值等于给定字符串,或者以该字符串开头,后跟连字符(-)。
例:查找具有 hreflang 属性为英语的所有链接。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>attributeContainsPrefix demo</title> <style> a { display: inline-block; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <a href="example.html" hreflang="en">Some text</a> <a href="example.html" hreflang="en-UK">Some other text</a> <a href="example.html" hreflang="english">will not be outlined</a> <script> $( "a[hreflang|='en']" ).css( "border", "3px dotted green" ); </script> </body> </html>
-
jQuery( “[attribute*=‘value’]” ):属性包含选择器。选择具有指定属性且其值包含给定子字符串的元素。这是与值匹配的最慷慨的 jQuery 属性选择器。如果选择器的字符串出现在元素属性值内的任何位置,它将选择一个元素。将此选择器与“属性包含单词”选择器(例如[attr~=“word”])进行比较,这在许多情况下更为合适。
例:查找名称属性包含“man”的所有输入,并使用一些文本设置值。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>attributeContains demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <input name="man-news"> <input name="milkman"> <input name="letterman2"> <input name="newmilk"> <script> $( "input[name*='man']" ).val( "has man in it!" ); </script> </body> </html>
-
jQuery( “[attribute~=‘value’]” ):属性包含单词选择器。选择具有指定属性的元素,该元素的值包含给定单词,以空格分隔。
例:查找具有包含单词“ man”的name属性的所有输入,并使用一些文本设置值。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>attributeContainsWord demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <input name="man-news"> <input name="milk man"> <input name="letterman2"> <input name="newmilk"> <script> $( "input[name~='man']" ).val( "mr. man is in it!" ); </script> </body> </html>
-
jQuery( “[attribute^=‘value’]” ):选择具有指定属性的元素,该元素的值完全以给定字符串开头。
此选择器对于标识由服务器端框架生成的页面中的元素很有用,该服务器端框架生成具有系统元素 ID 的 HTML。但是,它比使用类选择器要慢,因此,如果可以的话,请利用类将相似的元素分组。
-
jQuery( “[attribute$=‘value’]” ):选择具有指定属性且其值完全以给定字符串结尾的元素。比较是区分大小写的。
例:查找所有以“字母”结尾的属性名称的输入,并在其中输入文本。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>attributeEndsWith demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <input name="newsletter"> <input name="milkman"> <input name="jobletter"> <script> $( "input[name$='letter']" ).val( "a letter" ); </script> </body> </html>
-
jQuery( “[attribute=‘value’]” ):选择具有指定属性且其值完全等于某个值的元素。
-
jQuery( “[attribute!=‘value’]” ):选择不具有指定属性或具有指定属性但没有特定值的元素。此选择器等效于
:not([attr='value'])
。因为
[name!="value"]
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询[name!="value"]
无法利用本机DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用$("your-pure-css-selector").not("[name='value']")
。 -
jQuery( “[attribute]” ):选择具有指定属性且具有任何值的元素。
-
jQuery( “[attributeFilter1][attributeFilter2][attributeFilterN]” ):多属性选择器。匹配与所有指定的属性过滤器匹配的元素。
表单选择器
-
jQuery( “:button” ):选择所有按钮元素和按钮类型的元素。此选择器等效于
$("button, input[type='button']")
。因为
:button
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:button
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:button
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":button")
。 -
jQuery( “:checkbox” ):选中所有类型为复选框的元素。
$(":checkbox")
等同于$("[type=checkbox]")
。与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,裸露$(':checkbox')
等效于$("*:checkbox")
,因此应改用$("input:checkbox")
。因为
:checkbox
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:checkbox
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="checkbox"]
。 -
jQuery( “:checked” ):匹配所有选中的元素。在
:checked
选择适用于复选框,单选按钮和选项select
的元素。要仅检索select
元素的选定选项,请使用:selected
选择器。 -
jQuery( “:disabled” ):选择所有禁用的元素。
与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,
$(':disabled')
等效于$('*:disabled')
,因此应改用$('input:disabled')
或类似的符号。尽管选择的结果通常是相同的,但
:disabled
选择器与[disabled]
属性选择器有细微的不同。:disabled
选择实际上禁用的元素,而[disabled]
选择设置了禁用属性的元素。:disabled
选择器只应用于选择支持disabled
属性的 HTML 元素(<button>
,<input>
,<optgroup>
,<option>
,<select>
,<textarea>
,<menuitem>
,<fieldset>
)。 -
jQuery( “:enabled” ):选择所有启用的元素。
与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,
$(":enabled")
等效于$("*:enabled")
,因此应改用$("input:enabled")
或类似的符号。尽管选择的结果通常相同,但是
:enabled
选择器与:not([disabled])
选择器有细微的差别。:enabled
选择实际上启用的元素,而:not([disabled])
选择未设置禁用属性(无论其值如何)的元素。:enabled
选择器只应用于选择支持disabled
属性的 HTML 元素(<button>
,<input>
,<optgroup>
,<option>
,<select>
,<textarea>
,<menuitem>
,<fieldset>
)。 -
jQuery( “:file” ):选择文件类型的所有元素。
:file
等同于[type="file"]
。与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,$( ":file" )
等效于$("*:file" )
,因此应改用$( "input:file" )
。因为
:file
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:file
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="file"]
。 -
jQuery( “:image” ):选择图像类型的所有元素。
:image
相当于[type="image"]
。因为
:image
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:image
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="image"]
。 -
jQuery( “:input” ):选择所有
input
,textarea
,select
和button
元素。:input
选择器基本上选择所有表单控件。因为
:input
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:input
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:input
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":input")
。 -
jQuery( “:password” ):选择所有密码类型的元素。
$(":password")
等同于$("[type=password]")
。与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,$(":password")
等效于$("*:password")
,因此应改用$("input:password")
。因为
:password
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:password
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="password"]
。 -
jQuery( “:radio” ):选择所有单选类型的元素。
$(":radio")
等同于$("[type=radio]")
。与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,$(":radio")
等效于$("*:radio")
,因此应改用$("input:radio")
。要选择一组相关的单选按钮,可以使用
$("input[name=gender]:radio")
。因为
:radio
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:radio
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="radio"]
。 -
jQuery( “:reset” ):选择所有类型为 reset 的元素。
:reset
相当于[type="reset"]
。因为
:reset
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:reset
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="reset"]
。 -
jQuery( “:selected” ):选择所有选定的元素。
:selected
选择适用于<option>
元素,不适用于复选框或单选框(使用:checked
)。因为
:selected
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:selected
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:selected
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":selected")
。例:将 change 事件附加到 select 上,该事件获取每个选定选项的文本并将其写入 div 中。然后,它将触发事件以进行初始文本绘制。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>selected demo</title> <style> div { color: red; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <select name="garden" multiple="multiple"> <option>Flowers</option> <option selected="selected">Shrubs</option> <option>Trees</option> <option selected="selected">Bushes</option> <option>Grass</option> <option>Dirt</option> </select> <div></div> <script> $( "select" ) .change(function() { var str = ""; $( "select option:selected" ).each(function() { str += $( this ).text() + " "; }); $( "div" ).text( str ); }) .trigger( "change" ); </script> </body> </html>
-
jQuery( “:submit” ):选择所有类型为 submit 的元素。
:submit
选择器通常适用于 button 或 input。请注意,某些浏览器将<button>
元素type="submit"
隐式处理,而其他浏览器(例如Internet Explorer)则不然。为了确保标签在所有浏览器中都能一致地工作,并确保可以一致地选择提交表单的按钮,请始终指定type
属性。因为
:submit
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:submit
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用input[type="submit"], button[type="submit"]
。 -
jQuery( “:text” ):选择所有文本类型的 input 元素。
$(":text")
允许我们选择所有<input type="text">
元素。与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,$(":text")
等效于$("*:text")
,因此应改用$("input:text")
。**注意:**从 jQuery 1.5.2 开始,
:text
选择input
没有指定type
属性的元素(在这种情况下隐含type="text"
属性)。$(":text")
和$("[type=text]")
之间的行为差异如下所示:$("<input>").is("[type=text]"); // false $("<input>").is(":text"); // true
因为
:text
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:text
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type="text"]
。
层级选择器
-
jQuery( “parent > child” ):子选择器。选择指定父元素指定的所有直接子元素。
-
jQuery( “ancestor descendant” ):后代选择器。一个元素的后代可以是该元素的子代,孙代,曾孙代,等等。
例:用虚线蓝色边框标记属于表单后代的所有输入。为作为表单后代的字段集的后代的输入框提供黄色背景。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>descendant demo</title> <style> form { border: 2px green solid; padding: 2px; margin: 0; background: #efe; } div { color: red; } fieldset { margin: 1px; padding: 3px; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <form> <div>Form is surrounded by the green border.</div> <label for="name">Child of form:</label> <input name="name" id="name"> <fieldset> <label for="newsletter">Grandchild of form, child of fieldset:</label> <input name="newsletter" id="newsletter"> </fieldset> </form> Sibling to form: <input name="none"> <script> $( "form input" ).css( "border", "2px dotted blue" ); $( "form fieldset input" ).css( "backgroundColor", "yellow" ); </script> </body> </html>
-
jQuery( “prev + next” ):选择所有匹配 “prev(任何有效的选择器)” 并且紧随其后的是 “next(任何有效的选择器)” 的元素。
prev + next
和prev ~ siblings
选择器都需要考虑的重要一点是,组合器两侧的元素必须共享同一父级。例:查找 label 旁边的所有 input 元素。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>next adjacent demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <form> <label for="name">Name:</label> <input name="name" id="name"> <fieldset> <label for="newsletter">Newsletter:</label> <input name="newsletter" id="newsletter"> </fieldset> </form> <input name="none"> <script> $( "label + input" ).css( "color", "blue" ).val( "Labeled!" ); </script> </body> </html>
-
jQuery( “prev ~ siblings” ):选择所有匹配 “prev(任何有效的选择器)” 并且其后的是 “siblings(任何有效的选择器)” 的元素。
prev + next
和prev ~ siblings
之间的区别是作用范围不同,前者仅到达紧随其后的同级元素,而后者则将其延伸至所有其后的同级元素。例:选择以 id 为 #prev 的元素之后的所有同级 div。请注意,没有选择 span,因为它不是 div,没有选择 “niece”,因为它是同级的子级,而不是同级。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>next siblings demo</title> <style> div, span { display: block; width: 80px; height: 80px; margin: 5px; background: #bfa; float: left; font-size: 14px; } div#small { width: 60px; height: 25px; font-size: 12px; background: #fab; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div>div (doesn't match since before #prev)</div> <span id="prev">span#prev</span> <div>div sibling</div> <div>div sibling <div id="small">div niece</div></div> <span>span sibling (not div)</span> <div>div sibling</div> <script> $( "#prev ~ div" ).css( "border", "3px groove blue" ); </script> </body> </html>
过滤选择器
-
jQuery( “:contains(text)” ):选择包含指定文本的所有元素。区分大小写。匹配的文本可以直接出现在所选元素中,该元素的任何后代或其组合中。与属性选择器一样,括号内的文本
:contains()
可以写为裸词,也可以用引号引起来。文本必须具有匹配的大小写才能选择。例:查找包含“ John”的所有div并在其下划线。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>contains demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div>John Resig</div> <div>George Martin</div> <div>Malcom John Sinclair</div> <div>J. Ohn</div> <script> $( "div:contains('John')" ).css( "text-decoration", "underline" ); </script> </body> </html>
-
jQuery( “:animated” ):选择动画进行中的所有元素。
如果使用不带effects模块的自定义jQuery构建,则
:animated
选择器将抛出错误。因为
:animated
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:animated
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:animated
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":animated")
。例:更改任何动画进行中的 div 的颜色。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>animated demo</title> <style> div { background: yellow; border: 1px solid #AAA; width: 80px; height: 80px; margin: 0 5px; float: left; } div.colored { background: green; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <button id="run">Run</button> <div></div> <div id="mover"></div> <div></div> <script> $( "#run" ).click(function() { $( "div:animated" ).toggleClass( "colored" ); }); function animateIt() { $( "#mover" ).slideToggle( "slow", animateIt ); } animateIt(); </script> </body> </html>
-
jQuery( “:empty” ):选择所有没有子元素(包括文本节点)的元素。与
:parent
相反。W3C 建议<p>
元素至少具有一个子节点,即使该子节点仅仅是文本(请参见https://www.w3.org/TR/html401/struct/text.html#edef-P)。另一方面,根据定义,其他一些元素为空(即没有子元素):例如<input>
,<img>
,<br>
和<hr>
。 -
jQuery( “:eq(index)” ):选择匹配结果集中索引(从 0 开始)为 index 的元素。
jQuery( “:eq(-index)” ):选择匹配结果集中索引(从 0 开始)为 index 的元素。从最后一个元素开始倒数。
从 jQuery 3.4 开始,
:eq
不推荐使用。从选择器中将其删除,然后使用过滤结果.eq()
。在 jQuery 1.8 之前,
:eq(index)
选择器不接受负值index
。因为
:eq()
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:eq()
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用$("your-pure-css-selector").eq(index)
。 -
jQuery( “:gt(index)” ):选择匹配结果集中索引(从 0 开始)大于 index 的元素。
jQuery( “:gt(-index)” ):选择匹配结果集中索引(从 0 开始)大于 index 的元素。从最后一个元素开始倒数。
从 jQuery 3.4 开始,
:gt
不推荐使用。从选择器中将其删除,然后使用过滤结果.slice()
。例如,:gt(3)
可以用调用.slice( 4 )
代替(所提供的索引需要加一)。在 jQuery 1.8 之前,
:gt(index)
选择器不接受负值index
。因为
:gt()
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:gt()
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用$("your-pure-css-selector").slice(index)
。 -
jQuery( “:lt(index)” ):选择匹配结果集中索引(从 0 开始)小于 index 的元素。
jQuery( “:lt(-index)” ):选择匹配结果集中索引(从 0 开始)小于 index 的元素。从最后一个元素开始倒数。
从 jQuery 3.4 开始,
:lt
不推荐使用。从选择器中将其删除,然后使用过滤结果.slice()
。例如,:lt(3)
可以替换调用.slice(0, 3)
。在 jQuery 1.8 之前,
:lt(index)
选择器不接受负值index
。因为
:lt()
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:lt()
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用$("your-pure-css-selector").slice(0, index)
。例:将小于 4 索引(TD#4)的 TD 的背景设为黄色,将小于 -2 索引的 TD 设为红色。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>lt demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <table border="1"> <tr><td>TD #0</td><td>TD #1</td><td>TD #2</td></tr> <tr><td>TD #3</td><td>TD #4</td><td>TD #5</td></tr> <tr><td>TD #6</td><td>TD #7</td><td>TD #8</td></tr> </table> <script> $( "td:lt(4)" ).css( "backgroundColor", "yellow" ); $( "td:lt(-2)" ).css( "color", "red" ); </script> </body> </html>
-
jQuery( “:odd” ):选择索引(从 0 开始)为奇数的元素。
从 jQuery 3.4 开始,
:odd
不推荐使用。从选择器中将其删除,然后使用过滤结果.odd()
(在 jQuery 3.5.0 或更高版本中可用)。因为
:odd
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:odd
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:odd
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":odd")
。 -
jQuery( “:even” ):选择索引(从 0 开始)为偶数的元素。
从 jQuery 3.4开始,
:even
不推荐使用。从选择器中将其删除,然后使用过滤结果.even()
(在 jQuery 3.5.0 或更高版本中可用)。因为
:even
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:even
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:even
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":even")
。 -
jQuery( “:first-child” ):选择第一个子元素。虽然
.first()
仅匹配一个元素,但是:first-child
选择器可以匹配多个元素:每个父元素一个。等效于:nth-child(1)
。例:在每个匹配的 div 中找到第一个 span 加下划线并添加悬停状态。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>first-child demo</title> <style> span { color: #008; } span.sogreen { color: green; font-weight: bolder; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <span>John,</span> <span>Karl,</span> <span>Brandon</span> </div> <div> <span>Glen,</span> <span>Tane,</span> <span>Ralph</span> </div> <script> $( "div span:first-child" ) .css( "text-decoration", "underline" ) .hover(function() { $( this ).addClass( "sogreen" ); }, function() { $( this ).removeClass( "sogreen" ); }); </script> </body> </html>
-
jQuery( “:last-child” ):选择最后一个子元素。虽然
.last()
仅匹配一个元素,但:last-child
可以匹配多个元素:每个父元素一个。 -
jQuery( “:first-of-type” ):选择所有具有相同元素名称的同级元素中的第一个元素。
-
jQuery( “:last-of-type” ):选择所有具有相同元素名称的同级元素中的最后一个元素。
例:在每个匹配的 div 中找到最后一个 span,并添加一些 CSS 以及悬停状态。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>last-of-type demo</title> <style> span.solast { text-decoration: line-through; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <span>Corey,</span> <span>Yehuda,</span> <span>Adam,</span> <span>Todd</span> </div> <div> <span>Jörn,</span> <span>Scott,</span> <span>Timo,</span> <b>Nobody</b> </div> <script> $( "span:last-of-type" ) .css({ color:"red", fontSize:"80%" }) .hover(function() { $( this ).addClass( "solast" ); }, function() { $( this ).removeClass( "solast" ); }); </script> </body> </html>
-
jQuery( “:first” ):选择第一个匹配的DOM元素。
从 jQuery 3.4 开始,
:first
不推荐使用。从选择器中将其删除,然后使用过滤结果.first()
。:first
相当于:eq(0)
。也可以写成:lt(1)
。:first
仅匹配一个元素,但:first-child可以匹配多个:每个父元素一个。因为
:first
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:first
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:first
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":first")
。 -
jQuery( “:last” ):选择最后一个匹配的元素。
从 jQuery 3.4 开始,
:last
不推荐使用。从选择器中将其删除,然后使用过滤结果.last()
。因为
:last
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:last
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:last
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":last")
。 -
jQuery( “:focus” ):选择处于焦点状态的元素。
与其他伪类选择器(以 “:” 开头的选择器)一样,建议在其前面加上标签名称或其他选择器。否则,暗示通用选择器("*")。换句话说,
$( ":focus" )
等于$( "*:focus" )
。如果您正在寻找当前关注的元素,$(document.activeElement)
则无需搜索整个 DOM 树即可对其进行检索。例:将 focused 类添加到具有焦点的任何元素中
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>focus demo</title> <style> .focused { background: #abcdef; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div id="content"> <input tabIndex="1"> <input tabIndex="2"> <select tabIndex="3"> <option>select menu</option> </select> <div tabIndex="4"> a div </div> </div> <script> $( "#content" ).delegate( "*", "focus blur", function() { var elem = $( this ); setTimeout(function() { elem.toggleClass( "focused", elem.is( ":focus" ) ); }, 0 ); }); </script> </body> </html>
-
jQuery( “:has(selector)” ):选择包含至少一个与指定选择器匹配的元素的元素。
$("div:has(p)")
匹配后代中存在<p>
元素的<div>
,而不仅仅匹配直接子代。因为
:has()
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:has()
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用$("your-pure-css-selector").has(selector/DOMElement)
。 -
jQuery( “:header” ):选择所有标头元素,例如h1,h2,h3等。
因为
:header
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:header
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:header
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":header")
。 -
jQuery( “:hidden” ):选择所有隐藏的元素。
可以将元素视为隐藏的原因有几个:
- CSS
display
值为none
。 - 表单元素
type="hidden"
。 - 宽度和高度明确设置为 0。
- 祖先元素被隐藏,因此该元素未显示在页面上。
带有
visibility: hidden
或opacity: 0
的元素被视为可见,因为它们仍然占用布局中的空间。在隐藏元素的动画期间,该元素被视为可见,直到动画结束。
文档中未包含的元素不视为可见;jQuery 无法确定将它们附加到文档后是否可见,因为它取决于适用的样式。
该选择器与
:visible
选择器相反。在动画显示元素期间,该元素被认为在动画开始时是可见的。
如何确定
:hidden
在 jQuery 1.3.2 中已更改。如果元素或其任何父元素不占用文档中的空间,则假定该元素是隐藏的。不考虑 CSS 可见性(因此$(elem).css("visibility", "hidden").is(":hidden") == false
)。该发行说明勾勒出更详细的变化。jQuery 3 略微修改了
:hidden
(以及:visible
)的含义。从此版本开始,如果元素没有任何布局盒子,则认为是:hidden
。例如,没有内容的br
元素和内联元素将不会被:hidden
选择器选择。因为
:hidden
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:hidden
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:hidden
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":hidden")
。大量使用此选择器可能会对性能产生影响,因为它可能会迫使浏览器在确定可见性之前重新渲染页面。通过其他方法(例如,使用类)跟踪元素的可见性可以提供更好的性能。
- CSS
-
jQuery( “:visible” ):选择所有可见的元素。
如果元素占用了文档中的空间,则认为它们是可见的。可见元素的宽度或高度大于零。
带有
visibility: hidden
或的元素opacity: 0
被视为可见,因为它们仍然占用布局中的空间。文档中没有的元素被认为是隐藏的;jQuery 无法确定将它们附加到文档后是否可见,因为它取决于适用的样式。
与
:hidden
选择器相反。option
无论其selected
状态如何,所有元素均被视为隐藏。在隐藏元素的动画过程中,该元素被视为可见,直到动画结束。在动画显示元素期间,该元素在动画开始时被视为可见。
如何确定
:visible
在 jQuery 1.3.2中已更改。该发行说明勾勒出更详细的变化。jQuery 3 略微修改了
:visible
(以及:hidden
)的含义。从此版本开始,如果元素具有任何布局盒子(包括宽度和/或高度为零的布局盒子),则认为是:visible
。例如,没有内容的br
元素和内联元素将会被:visible
选择器选择。因为
:visible
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:visible
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:visible
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":visible")
。大量使用此选择器可能会对性能产生影响,因为它可能会迫使浏览器在确定可见性之前重新渲染页面。通过其他方法(例如,使用类)跟踪元素的可见性可以提供更好的性能。
-
jQuery( “:lang(language)” ):选择指定语言的所有元素。
:lang()
选择具有 lang 属性并且值等于所提供的语言代码以所提供的语言代码开头紧接着 “-”。例如,选择器$("div:lang(en)")
将匹配<div lang="en">
和<div lang="en-us">
(及其任何后代<div>
),但不匹配<div lang="fr">
。对于HTML元素,语言值由
lang
属性以及可能来自meta
元素或 HTTP 标头的信息 确定。有关此用法的进一步讨论可以在W3C CSS规范中找到。
例:根据语言为div元素上色。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>lang demo</title> <style> body { background-color: #ccc; } h3 { margin: .25em 0; } div { line-height: 1.5em } .usa { background-color: #f00; color: #fff; } .usa .usa { background-color: #fff; color: #000; } .usa .usa .usa { background-color: #00f; color: #fff; } .spain { background-color: #f00; color: #ff0; } .spain .spain { background-color: #ff0; color: #f00; line-height: 3em; } .spain .spain .spain { background-color: #f00; color: #ff0; line-height: 1.5em; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <h3>USA</h3> <div lang="en-us">red <div>white <div>and blue</div> </div> </div> <h3>España</h3> <div lang="es-es">rojo <div>amarillo <div>y rojo</div> </div> </div> <script> $( "div:lang(en-us)" ).addClass( "usa" ); $( "div:lang(es-es)" ).addClass( "spain" ); </script> </body> </html>
-
jQuery( “:not(selector)” ):选择与给定选择器不匹配的所有元素。
例:查找所有未选中的 input,并突出显示下一个同级 span。请注意,由于未链接任何单击事件,因此单击复选框时没有任何变化。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>not demo</title> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <input type="checkbox" name="a"> <span>Mary</span> </div> <div> <input type="checkbox" name="b"> <span>lcm</span> </div> <div> <input type="checkbox" name="c" checked="checked"> <span>Peter</span> </div> <script> $( "input:not(:checked) + span" ).css( "background-color", "yellow" ); $( "input").attr( "disabled", "disabled" ); </script> </body> </html>
-
jQuery( “:nth-child(index/even/odd/equation)” ):选择其父级的第 n 个子元素。索引从
1
开始,还可以是字符串even
或odd
,方程式(例如:nth-child(even)
,:nth-child(4n)
)。因为 jQuery 的
:nth-
选择器的实现严格遵从 CSS 规范,所以从 1 开始索引。.first()
或.eq()
之类的方法从0 开始索引。给定一个<ul>
包含两个<li>
,$("li:nth-child(1)")
选择第一个,而$("li").eq(1)
选择第二个。更多用法的进一步讨论可以在W3C CSS规范中找到。
例:在这里可以看到选择器如何与不同的字符串一起使用。请注意,
even
和odd
不考虑父项,只是将匹配的元素列表过滤。但是,:nth-child
会计算子项相对其父项的索引。<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>nth-child demo</title> <style> button { display: block; font-size: 12px; width: 100px; } div { float: left; margin: 10px; font-size: 10px; border: 1px solid black; } span { color: blue; font-size: 18px; } #inner { color: red; } td { width: 50px; text-align: center; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <button>:nth-child(even)</button> <button>:nth-child(odd)</button> <button>:nth-child(3n)</button> <button>:nth-child(2)</button> </div> <div> <button>:nth-child(3n+1)</button> <button>:nth-child(3n+2)</button> <button data-method="even">.even()</button> <button data-method="odd">.odd()</button> </div> <div> <table> <tr><td>John</td></tr> <tr><td>Karl</td></tr> <tr><td>Brandon</td></tr> <tr><td>Benjamin</td></tr> </table> </div> <div> <table> <tr><td>Sam</td></tr> </table> </div> <div> <table> <tr><td>Glen</td></tr> <tr><td>Tane</td></tr> <tr><td>Ralph</td></tr> <tr><td>David</td></tr> <tr><td>Mike</td></tr> <tr><td>Dan</td></tr> </table> </div> <span>tr<span id="inner"></span></span> <script> $( "button" ).click(function() { var str = $( this ).text(); var method = $( this ).attr( "data-method" ); $( "tr" ).css( "background", "white" ); if ( method ) { $( "tr" )[ method ]().css( "background", "#ff0000" ); } else { $( "tr" + str ).css( "background", "#ff0000" ); } $( "#inner" ).text( str ); }); </script> </body> </html>
-
jQuery( “:nth-last-child(index/even/odd/equation)” ):从最后一个元素(索引 1)开始倒数,选择其父级的第 n 个子元素。索引从
1
开始,还可以是字符串even
或odd
,方程式(例如:nth-last-child(even)
,:nth-last-child(4n)
)。例:在这里可以看到选择器如何与不同的字符串一起使用。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>nth-last-child demo</title> <style> button { display: block; font-size: 12px; width: 100px; } div { float: left; margin: 10px; font-size: 10px; border: 1px solid black; } span { color: blue; font-size:18px; } #inner { color: red; } td { width: 50px; text-align: center; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <button>:nth-last-child(even)</button> <button>:nth-last-child(odd)</button> <button>:nth-last-child(3n)</button> <button>:nth-last-child(2)</button> </div> <div> <button>:nth-last-child(3n+1)</button> <button>:nth-last-child(3n+2)</button> </div> <div> <table> <tr><td>John</td></tr> <tr><td>Karl</td></tr> <tr><td>Brandon</td></tr> <tr><td>Benjamin</td></tr> </table> </div> <div> <table> <tr><td>Sam</td></tr> </table> </div> <div> <table> <tr><td>Glen</td></tr> <tr><td>Tane</td></tr> <tr><td>Ralph</td></tr> <tr><td>David</td></tr> <tr><td>Mike</td></tr> <tr><td>Dan</td></tr> </table> </div> <span>tr<span id="inner"></span></span> <script> $( "button" ).click(function() { var str = $( this ).text(); $( "tr" ).css( "background", "white" ); $( "tr" + str ).css( "background", "#ff0000" ); $( "#inner" ).text(str); }); </script> </body> </html>
-
jQuery( “:nth-last-of-type(index/even/odd/equation)” ):从最后一个元素(索引 1)倒数,选择其父元素的第 n 个同级子元素。索引从
1
开始,还可以是字符串even
或odd
,方程式(例如:nth-last-of-type(even)
,:nth-last-of-type(4n)
)。更多用法的进一步讨论可以在W3C CSS规范中找到。
例:在这里可以看到选择器如何与不同的字符串一起使用。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>nth-last-of-type demo</title> <style> button { display: block; font-size: 12px; width: 100px; } div { float: left; margin: 10px; font-size: 10px; border: 1px solid black; } span { color: blue; font-size: 18px; } #inner { color: red; } td { width: 50px; text-align: center; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <button>:nth-last-of-type(even)</button> <button>:nth-last-of-type(odd)</button> <button>:nth-last-of-type(3n)</button> <button>:nth-last-of-type(2)</button> </div> <div> <button>:nth-last-of-type(3n+1)</button> <button>:nth-last-of-type(3n+2)</button> </div> <div> <table> <tr><td>John</td></tr> <tr><td>Karl</td></tr> <tr><td>Brandon</td></tr> <tr><td>Benjamin</td></tr> </table> </div> <div> <table> <tr><td>Sam</td></tr> </table> </div> <div> <table> <tr><td>Glen</td></tr> <tr><td>Tane</td></tr> <tr><td>Ralph</td></tr> <tr><td>David</td></tr> <tr><td>Mike</td></tr> <tr><td>Dan</td></tr> </table> </div> <span>tr<span id="inner"></span></span> <script> $( "button" ).click(function() { var str = $( this ).text(); $( "tr" ).css( "background", "white" ); $( "tr" + str ).css( "background", "#ff0000" ); $( "#inner" ).text( str ); }); </script> </body> </html>
-
jQuery( “:nth-of-type(index/even/odd/equation)” ):选择其父元素的第 n 个同级子元素。索引从
1
开始,还可以是字符串even
或odd
,方程式(例如:nth-of-type(even)
,:nth-of-type(4n)
)。 -
jQuery( “:only-child” ):选择其父元素的唯一子元素。如果父级具有其他子元素,则不会匹配。
例:选择只有一个 button 子元素的 div 中的 button 元素,修改其文本并添加边框。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>only-child demo</title> <style> div { width: 100px; height: 80px; margin: 5px; float: left; background: #b9e; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <button>Sibling!</button> <button>Sibling!</button> </div> <div> <button>Sibling!</button> </div> <div> None </div> <div> <button>Sibling!</button> <button>Sibling!</button> <button>Sibling!</button> </div> <div> <button>Sibling!</button> </div> <script> $( "div button:only-child" ).text( "Alone" ).css( "border", "2px blue solid" ); </script> </body> </html>
-
jQuery( “:only-of-type” ):选择所有没有相同元素名称同级元素的元素。如果父级的其他子元素具有相同的元素名称,则不会匹配。
例:选择作为其父元素的唯一子元素的 button 元素,修改其文本并添加边框。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>only-of-type demo</title> <style> div { width: 100px; height: 80px; margin: 5px; float: left; background: #b9e; } span { padding: 2px; margin: 3px; line-height: 1.4; border: 1px solid #000; } </style> <script src="https://code.jquery.com/jquery-3.5.0.js"></script> </head> <body> <div> <button>Sibling!</button> <button>Sibling!</button> </div> <div> <button>Sibling!</button> </div> <div> None </div> <div> <button>Sibling!</button> <span>Sibling!</span> <span>Sibling!</span> </div> <div> <button>Sibling!</button> </div> <script> $( "button:only-of-type" ).text( "Alone" ).css( "border", "2px blue solid" ); </script> </body> </html>
-
jQuery( “:parent” ):选择具有至少一个子节点(元素或文本)的所有元素。
与
:empty
相反。要获取现有 jQuery 集的父母或祖先,请参见
.parent()
和.parents()
方法。因为
:parent
是 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询:parent
无法利用本机 DOMquerySelectorAll()
方法提供的性能提升。为了在:parent
选择元素时获得最佳性能,请先使用纯 CSS 选择器选择元素,然后使用.filter(":parent")
。 -
jQuery( “:root” ):选择作为文档根目录的元素。在 HTML 中,文档的根以及
$(":root")
选择的元素始终是<html>
元素。 -
jQuery( “:target” ):选择由文档 URI 的片段标识符指示的目标元素。
如果文档的 URI 包含片段标识符或哈希,那么
:target
选择器将使用与标识符匹配的 ID 来匹配元素。例如,给定 URI为 https://example.com/#foo 的文档,$("p:target")
将选择<p id="foo">
元素。更多用法的进一步讨论可以在W3C CSS规范中找到。