接着上一篇继续,今天学习对元素包装集进行精简、扩展或取子集的多种途径。
不知道大家对包装集这个词有没有概念,其实就是我们用jQuery选择器或筛选器最终得到的一个或一组符合条件的集合。
比如:$("li:has(a)"); 它的包装集就是所有包含元素的
1、确定包装集的大小
通常包装集是一个javascript数组,而在javascript中有length属性去获得数组的长度,jQuery中也有类似的东西,不过不是属性,而是方法。
size():返回包装集里元素的个数。
举个例子:
$("#myDiv").html("There are " + "$("a").size()" + " on this page.");
相信不用我解释大家也很明白了,就是匹配页面上所有的元素,接着调用.size()方法,返回匹配的个数。
get(index):获取包装集里的一个或所有匹配元素。如果不指定参数,包装集里的所有元素就以javascript数组形式返回;如果指定下标参数,就返回下标所对应的元素。
$("img[alt]").get(0); <==> $("img[alt]")[0];
如果不指定参数的话,就是以javascript数组形式返回。
var allImgWithAlt = $("img[alt]").get();
此外,如果我们已知某元素,想知道它在某包装集里的下标,我们有另一个方法。
index(element):在包装集里查找传入的元素,并返回该元素在包装集里的顺序下标;如果该元素不在包装集里,则返回-1。
举个例子:得到带有类ironman的元素集合中第五个元素在所有
里的位置。
var pos = $("img").index($("img.ironman]").get(4) );
add(expression):把表达式参数所指定的元素添加到包装集。表达式可以是选择器、HTML片段、DOM元素或DOM元素数组。返回的是包装集。
expression:(字符串|元素|数组)指定添加到包装集的元素。
举个例子:包含alt属性的元素和包含title属性的
的集合。
$("img[alt]").add("img[title]");
$("img[alt], img[title]");
这么写我们不是更熟悉吗?对,没错,这样写也可以,但是想到如果我们要充分利用到jQuery链的话,也许前者更好些。同样的效果用前者可以这样实现
$("img[alt]").addClass("RedBorder").add("img[title]").addClass("Bigger");
$("img[alt]).addClass("RedBorder");$("img[alt], img[title]").addClass("Bigger");
哪个更好?这个是表示给包含alt属性的元素加RedBorder类,给包含alt属性的
元素和包含title属性的
的元素加Bigger类。
举个例子:排除集合中title内容包含puppy字段的剩余元素。
$("img").not("[title*=puppy]");
filter(expression):利用传入的选择器表达式或筛选函数,从包装集里筛选元素。返回的是包装集。
filter()的与not()想达成的效果是一样的,那就是都是在缩小集合。不一样的是not()用的是排除条件,而filter()用的是筛选条件。大家这块一定要理清。
举个例子:筛选出集合中title内容包含puppy字段的元素。
$("img").filter("[title*=puppy]");
slice(begin, end):创建并返回新包装集,新包装集包含原始包装集的连续的一部分。返回新建的包装集。
begin:(数字)返回切片中的第一个元素的下标(从0开始)。
end:(数字,可选)返回切片中的最后一个元素的下标(从0开始),如省略,则指原始包装集的末尾。
$("*").slice(0,4);
$("*").slice(4);
jQuery还允许根据和其他DOM元素的关系,从DOM选择元素。具体的方法大家去网上查一下,我列举两个自己经常会用到的
next(expression):返回原始包装集元素的所有唯一的下一个兄弟元素所组成的包装集。
parent(expression):返回原始包装集所有元素的唯一直接父元素所组成的包装集。
find(selector):返回新包装集,包含原始包装集里与传入选择器表达式相匹配的所有元素。注意:原始包装集里的元素的后代,会因为与传入的选择器表达式相匹配而被包含在新包装集里。
selector:(字符串)一个jQuery选择器,元素必须匹配这个选择器,才能成为新包装集的一部分。
除了在包装集里查找匹配的元素外,jQuery还提供方法查找包含指定字符串的元素。
contains(text):返回新包装集,由包含text参数所传入的文本字符串的元素所组成。
$("p").contains("I love you");
is(selector):确定包装集里是否有元素匹配传入的选择器表达式。如果至少有一个元素匹配传入的选择器,返回true,否则返回false。
selector:(字符串)选择器表达式,用于测试包装集的元素。
当我们不知道自己的选择器写的是否对的时候,就可以拿它来测试一下
var hasImage = $("*").is("img");
end():在jQuery命令链内调用,以便回退到前一个包装集。返回前一个包装集。
有了end()方法,就使jQuery链能更好的操作,延续下去。
关于jQuery的学习系列笔记我写的会比较简洁,更注重的是快速上手使用,当然,非常重要的知识点我还是会专门指出的。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。