这是 jQuery 最基础的概念,意思是 “选择一些元素然后通过它们做一些事” 除一些非标准的选择器外,jQuery 支持大部分的 CSS3 选择器。若要了解完整的选择器参考, 请访问 http://api.jquery.com/category/selectors/.
以下是一些通用选择技术的例子
Example 3.8. 伪选择器
$('a.external:first'); $('tr:odd'); $('#myForm :input'); // 在一个form中选择所有的输入项 $('div:visible'); $('div:gt(2)'); // 除去1,3之外的所有项 $('div:animated'); // 所有当前项动态区分 all currently animated divs
当你使用 :visible
和 :hidden
伪选择器时, jQuery 会测试元素的真实可见性, 而不是它的CSS的可见性或显示 — 就是说, 如果physical height and width on the page 都大于零,它就可以看见. 然而,这个测试不能与
<tr>
元素一起工作; 在这种情况下, jQuery 检测
CSS display
属性, 如果
它的 display
属性被设置成 none
那就认为这个元素将隐藏。
即使 CSS 将影响它们的视觉渲染,元素也不会被添加到被隐藏的DOM中。 (请看这一章的后面操作小节有关如何创建和增加元素到DOM中的介绍。)
作为参考, 这里的jQuery代码被用于检测此元素是显示还是隐藏,为了清楚也添加了注释:
jQuery.expr.filters.hidden = function( elem ) { var width = elem.offsetWidth, height = elem.offsetHeight, skip = elem.nodeName.toLowerCase() === "tr"; // 元素的高度为0,宽度为0, // 并且它不是 <tr>? return width === 0 && height === 0 && !skip ? // 所以它必须隐藏 true : // 但是如果它拥有高度和宽度值 // 并且它不是 <tr> width > 0 && height > 0 && !skip ? // 所以它必须显示 false : // 如果我们到了这,元素拥有宽度 // 和高度, 但它也是一个 <tr>, // 所以检查显示属性以 // 确定是否隐藏 jQuery.curCSS(elem, "display") === "none"; }; jQuery.expr.filters.visible = function( elem ) { return !jQuery.expr.filters.hidden( elem ); };
一旦你已经指定一个选择器,你将希望知道它是否正常工作。你可能倾向于这样做:
if ($('div.foo')) { ... }
这不会工作的。当你使用 $()
指定一个选择器,一个对象将返回,对象也将计算为 true
。 即使你的选择器没有包含任何元素,包含 if
语句的代码仍将执行。
相反,你需要测试选择器的长度属性,并告诉你包含了多少元素。如果回答是 0, 当以布尔值使用时候起长度属性将被赋予 false // 当长度属性作为布尔值时它的计算值将为 false。
每次你指定了一个选择器,一段代码运行,jQuery 都不会为你做任何的 caching 工作。如果你已经指定了选择器而你又需要重新指定它时,它将在变量中保存选择器,而不是反复的指定它。
在 Example 3.10, “在变量中保存选择器”, 变量名以一个美元符号开始。不像在其它的语言中,在 JavaScript 中没有特定的指定美元符号 -- 而是使用其它字符 。我们在这里使用它是为了表明变量包含一个 jQuery 对象。这是惯例 -- 一种 匈牙利命名法 -- 这仅仅是惯例,而不是强制性的。
一旦你保存了选择器,你就能在保存的变量中调用 jQuery 方法,就像在原来的选择器中调用一样。
只有当你指定一个选择器后,选择器才会从页面取回元素。如果你添加元素到页面延迟了,你必须重新选择或将它们添加到存储在变量中的选择器中。当 DOM 改变时被保存的选择器不会自动更新。
有时你有一个选择器包含比此后的还要多;在这种情况下,你需要改善你的选择器。 jQuery 提供了多种方法用来校正你之后的精确 offers several methods for zeroing in on exactly what you're after.
Example 3.11. 改善选择器
$('div.foo').has('p'); // 包含lt;p> 的元素 $('h1').not('.bar'); // h1 元素被包含 bar 这个类 $('ul li').filter('.current'); // 当前类的所有无序项 $('ul li').first(); // 第一项 $('ul li').eq(5); // 第六项
jQuery 提供了多个伪选择器帮助你发现表单中的元素;这些尤其有帮助,因为它能在使用标准CSS选择器的基于状态或类型的form元素中艰难区分these are especially helpful because it can be difficult to distinguish between form elements based on their state or type using standard CSS selectors.
选择 <button>
元素 和 元素type="button"
类型
选择输入 type="checkbox"
类型
选择选中输入
选择禁用表单元素
选择启用表单元素
选择 type="file"
输入类型
选择 type="image"
输入类型
选择 <input>
,
<textarea>
, 和 <select>
元素
选择 type="password"
密码类型
选择 type="radio"
输入类型
选择 type="reset"
输入类型
选择被选中的选项
选择 type="submit"
输入类型
选择 type="text"
输入类型
Copyright Rebecca Murphey, released under the Creative Commons Attribution-Share Alike 3.0 United States license.