< p>
<
it is not necessary to provide the actual element in conjunction with filter, such as < some examples: the custom check code carefully make sure you understand why returned it often determine set actually contains specific element. using obviously, second note: starting 1.3, strong>is() is('.class') $('expression, expression, expression') length :positionabsolute filter() 注释:< strong>有关创建自己的选择器的更多信息,我建议阅读以下内容:http: www.bennadel.com blog 1457-how-to-build-a-custom- jquery-selector.htm< jquery 提供了过滤器,用于通过集合中元素的数字上下文来过滤包装器集。< 这些过滤器是:< 使用 如果还不是很明显,请允许我进一步解释。 只能返回单个元素的原因是,当只有一个集合时,集合中只能有一个元素被首先考虑。这应该是相当合乎逻辑的。检查下面的代码,看看这个概念的实际应用。< <li>1< <li>2< <li>3< <li>4< <li>5< <li>6< <li>7< <li>8< <li>9< <li>10< text() combines contents string. alert('there ' $('li').length set'); get me alert($('li:first').text()); "1" last alert($('li:last').text()); "10" 6th set, index alert($('li:eq(5)').text()); "6" 有了对操作集合本身的清晰理解,我们可以通过使用过滤器来选择与实际 中其他元素具有唯一关系的元素,从而增强对选择元素的理解。 提供了几个选择器来执行此操作。其中一些选择器是自定义的,而另一些则是众所周知的用于选择 元素的 表达式。< <li> 使用这些选择器过滤器将根据元素在 中与 中其他元素的关系来选择元素。为了演示这个概念,让我们看一些代码。< alert($('li:nth-child(2)').text()); "22" alert($('li:nth-child(odd)').text()); "135135" alert($('li:nth-child(even)').text()); "2424" alert($('li:nth-child(2n)').text()); 如果您对 要记住的概念是,并非所有过滤器都是平等创建的。确保您了解哪些是基于 关系进行过滤的,例如 以下是用作名称的文字部分时需要转义的字符的完整列表。< <li>$('div:hidden')< code>. you simply pass filter separately wherever a selector expression required. <
selects all hidden $(':hidden'); div elements, then selects only even $('div').filter(':even'); pre>
groping:hidden and :visible filters<
:hidden< code>
:visible< do take css visibility properties into account one would expect. the way determines whether an or visible if takes up any space document. specifically,
offsetwidth<
offsetheight< reported by browser greater than 0. this way, that might have
display< value
block< contained within
display< 的值>none< accurately report it invisible.
true< code>, though selected
< has inline of
display:block< <!doctype html> <html lang=""en">" <body> <div id=""secondUL">" none;"> block;">< div> < <script <script> (function($){ returns true because parent hidden, so encapsulated reports zero offsetwidth offsetheight alert($('#childdiv').is(':hidden')); })(jquery); script> body>
use is() method return boolean value<
is()< we check current based on filter. will at least given if contained,
false< returned. check following code: alert($('div').is('#i1')); false. wrapper no <div> alert($('div').is('#i2')); alert($('div').is(':hidden'));
alert()< false our wrapper does contain
id< attribute
i2<
##. code>is()
very convenient for determining p>
supports expressions. previously, complex expressions those containing hierarchy selectors (such
, code>~
, code>>
) always code>true
. p>filters are other internal functions. therefore, rules apply here also here. p>some developers use
class. don't forget already this called code>hasclass('class')
, which be multiple values. but honest, code>hasclass()
just convenience around method.
you jquery h2>you comma-separated first parameter function:
. in words, limited using single elements. for example, example below, i three function. <div>jquery <p>is p> <ul> <li>best!< li> ul> (function ($) { alerts best! alert($('div, p, ul li').text()); inefficient way. alert($('div').text() + $('p').text() $('ul p>each dom added set. we methods operate these remember placed same wrapping an inefficient call function times, once each expression. wrapperset.length selection anything checking length. array property
. code>length
0, know matches passed there code>id
"nothere" page. guess what? it's there! "0" alert($('#nothere').length); it's obvious, length number - how many function.< strong>
create selecting elements h2>it possible extend functionality engine creating your own filters. theory, everything part jquery. let's say want web page absolutely positioned. since doesn't
yet, create own. absolute">absolute< <span span> <div>static< define extending $.expr[':'] $.expr[':'].positionabsolute="function" (element) $(element).css('position')="==" 'absolute'; }; how positioned? alert($(':positionabsolute').length); "4" alert($('div:positionabsolute').length); "2" p>the most important thing grasp default provided however, before time version selector, try
specified could avoid writing code>:positionabsolute
code>filter()
code>
previous example. remove from positioned $('div').filter(function () $(this).css('position')="==" }); $('*').filter(function
按数字顺序过滤与 关系过滤之间的差异<
<li>
:first< code>< li> <li>
:last< <li>
:even< <li>
:odd< <li>
:eq(index)< <li>
:gt(index)< <li>
:lt(index)< ul> strong>过滤包装器集本身的过滤器通过过滤集合中起始点 0 或索引 的元素来实现这一点。例如
:eq(0)< 和
:first 访问集合中的第一个元素
$('div:eq(0)')< 索引为 0。这与单索引的
:nth-child< 过滤器形成对比。这意味着,例如
:nth-child(1)< 将返回第一个子元素,但尝试使用
:nth-child(0)< 将不起作用。使用 将始终不选择任何内容。<
:first< 将选择集合中的第一个元素,而
:last< 将选择集合中的最后一个元素。请记住,它们根据集合内的关系(从 开始的数字层次结构)过滤集合,而不是 上下文中元素的关系。有了这些知识,就应该很明显为什么过滤器 code>、
:last< 和
:eq(index)< 将始终返回单个元素。<
祖先后代< <li>
父级>子< <li>
上一个 下一个< <li>
prev ~ 兄弟姐妹< <li>
:nth-child(选择器)< <li>
:first-child< <li>
:last-child< <li>
:only-child< <li>
:empty< <li>
:has(选择器)< <li>
:parent<
$('li:nth-child(odd)').text()< 返回值 135135 感到惊讶,那么您还没有掌握关系过滤器。
$('li:nth-child(odd)')< 口头上说的是“查找网页中所有属于子元素的
<li>< 元素,然后按奇数子元素过滤它们”。好吧,碰巧页面中有两个结构,它们有一组由 code>s 组成的兄弟结构。我的观点是这样的:包装器集由基于过滤器的元素组成,该过滤器考虑了元素与 中其他元素的关系。这些关系可以在多个位置找到。<
:only-child< code>-以及哪些按元素的位置进行过滤-例如
:eq()< code>-在包装集中。<
当值包含元字符时按 id 选择元素< 选择器使用一组元字符(例如
# []=">
" ),当用作名称的文字部分时(例如 id=""#foo[bar]"
" )应该被逃脱。可以通过在字符前放置两个反斜杠来转义字符。检查下面的代码,了解如何在选择表达式中使用两个反斜杠来选择 属性值为 #foo[bar]< 的元素。< "jquery" alert($('#\\#foo\\[bar\\]').text());
#< <li>
;< <li>
&< <li>
,< <li>
.< <li>
+< <li>
*< <li>
~< <li>
'< <li>
:< <li>
“< <li>
!< <li>
^< <li>
$< <li>
[< <li>
]< <li>
(< <li>
)< <li>
<li>
>< <li>
|<
堆叠选择器过滤器<