jQuery笔记(三)-- 使用过滤器

jQuery选择器能够模仿CSS和XPath语法,提供高效、准确匹配元素的方法,jQuery过滤器是一系列简单,实用的jQuery对象,建立在选择器基础上对jQuery对象进行二次过滤。在jQuery框架中,过滤器通过Sizzle.filter子类实现,包含过滤、查找和串联三类操作行为

1、过滤

过滤是对jQuery对象所包含的元素进行再筛选的操作,jQuery过滤方法主要包括8种:

过滤方法 说明
eq(index) 获取第N个元素
hasClass(class) 检查当前的元素是否包含某个特定的类,如果有则返回true
filter(expr) 筛选出与指定表达式匹配的元素集合
is(expr) 用一个表达式来检查当前选择的元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true
map(callback) 将一组元素转换成其他数组(不论是否是元素数组)
has(expr) 保留包含特定后代的元素,去掉那些不含有指定后代的元素
not(expr) 删除与指定表达式匹配的元素
slice(start,[end]) 选取一个匹配的子集
  • 类过滤:就是根据元素的类特性进行过滤操作,hasClass(className)
  • 下表过滤:可以精确找出jQuery对象中指定下表为止的元素,eq(index),参数index是一个整数值,从0开始,用来指定元素在jQuery对象中的下标位置
  • 表达式过滤:是最强大的过滤工具,因为表达式具有较大的灵活性,只要表达式符合jQuery选择器语法形式,可以是简单的选择符,也可以是复合型选择器。
    • filter():接受表达式参数的filter(expr)、接受函数参数的filter(fn)
    • has():是一个轻便的过滤器,没有filter()复杂,它保留包含特定后代的元素,去掉那些不含有指定后代的元素。
  • 判断:is(expr)方法不直接过滤元素,仅作为一个检测工具判断jQuery对象是否包含特定条件的元素
  • 映射:map()方法能够把jQuery对象中每个元素映射到一个新的jQuery对象中,map(callback)
  • 清除:not(expr)方法能从jQuery对象中删除符合条件的元素,并返回清除后的jQuery对象
  • 截取:slice()方法能够从jQuery对象中截取部分元素,并把这个被截取的元素集合装在一个新的jQuery对象中返回,用法:slice(start,[end])。参数start表示开始选取子集的位置,第一个元素的0,若该参数是负数,则表示从集合尾部开始选起。end是一个可选参数,表示选取结束的位置,如果不指定,则表示到集合的结尾,但不包括end所指定位置的元素

使用过滤器:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
        $("p").filter(function () {
            return $("span", this).length == 2;
        }).css("background-color","blue");
        $("p").has("span.red").css("background-color","red");
    })
    </script>
    <title>使用过滤器</title>

</head>
<body>

<p><span class="red">床前明月光,疑是地上霜。</span></p>
<p><span>举头望明月,</span><span>低头思故乡。</span></p>
<p>独在异乡为异客,每逢佳节倍思亲。</p>
<p>遥知兄弟登高处,遍插茱萸少一人。</p>
</body>
</html>

map映射:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
        $("#submit").click(function () {
            $("p").html("<h2>提交信息</h2>").append($("input").map(function () {
                return $(this).val();
            }).get().join("、 "));
        })
    })
    </script>
    <title>map映射</title>
</head>
<body>
<form action="#">
    用户名<input type="text" name="name" value="zhangsan" /><br><br>
    密码<input type="password" name="password" value="12345678" /><br><br>
    网址<input type="text" name="url" value="http://www.baidu.com" /><br><br>
    <button id="submit">提交</button>
</form>


<p></p>
</body>
</html>

2、查找

查找操作主要是以jQuery对象为基础,查找父级、同级或者下级相关元素,以便实现延伸筛选,增强对文档的控制能力。jQuery中的查找方法主要包括16种

查找方法 说明
add(expr,[context]) 把与表达式匹配的元素添加到jQuery对象中
children([expr]) 取得一个匹配的元素集合中每一个元素的所有子元素的元素集合
closest(expr,[context]) 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的元素
contents() 查找匹配元素内部所有的子节点(包括文本节点)
find(expr) 搜索所有与指定表达式匹配的元素
next([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合
nextAll([expr]) 查找当前元素之后所有的同辈元素
nextUntil([seletor]) 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止
offsetParent() 返回第一个匹配元素用于定位的父节点
parent([expr]) 取得一个包含所有匹配元素的唯一父元素的元素集合
parents([expr]) 取得一个包含所有匹配元素的祖先元素的元素集合(不包含根元素)
parentsUntil([seletor]) 查找当前元素的所有父辈元素,直到遇到匹配的那个元素为止
prev([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合
prevAll([expr]) 查找当前元素之前所有的同辈元素
prevUntil([seletor]) 查找当前元素之前所有的同辈元素,直到遇到匹配的那个元素为止
siblings([expr]) 取得一个包含匹配的元素集合中每一个元素的唯一同辈元素的元素集合
  • 向下查找
    • children()方法能够查找当前元素的所有或者部分子元素,用法childern(expr)
    • contents()方法不仅可以获取子元素也可以获取文本节点和注释节点,该方法没有参数,功能等同于DOM的childNodes
    • find()方法能够查找所有后代元素,而childern()方法仅能够查找子元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
        var j = $("body > div");
        alert(j.children("div").length); // 返回3个div元素
        alert(j.find("div").length); // 返回5个div元素
        alert(j.contents().length); // 返回7个元素,包括5个div元素,2个文本节点(空格)
    })
    </script>
    <title>向下查找</title>
</head>
<body>
<div>
    <div>
        <div></div>
        <div>  </div>
    </div>
    <div></div>
    <div></div>
</div>

</body>
</html>
  • 向上查找
    • parents()方法能够查找所有匹配元素的祖先元素
    • parent()方法是对parents()方法的延伸,它可以取得一个包含着所有匹配元素的唯一父元素的元素集合。用法parent([expr])
    • parentsUntil()方法可以查找指定范围的所有祖先元素,相当于在parents()方法返回集合中截取部分祖先元素。用法parentsUntil([selector])
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
//        $("img").parents().css({"border":"solid 1px red", "margin":"10px"});
        $("img").parent().css({"border":"solid 1px red", "margin":"10px"});
//        alert($("img").parents().length); // 返回4,分别是span、div、body和html
        alert($("img").parent().length); // 返回2,分别是span和div
        $("img").parent().each(function () {
            alert(this.nodeName); // 提示SPAN和DIV
        })

    })
    </script>
    <style type="text/css">
        img {height: 200px; width: 200px;}
    </style>
    <title>向上查找</title>
</head>
<body>
<div>
    <span>
        <img src="../resource/test_image.jpeg">
    </span>
    <img src="../resource/test_image.jpeg">
</div>
</body>
</html>
  • 向前查找
    • prev()方法能够匹配前一个相邻元素。用法prev([expr])
    • prevAll()方法能够向前选取所有相邻的同辈元素。用法prevAll([expr])
    • prevUntil()方法能够向前选取指定范围的相邻元素。用法prevUntil([selector])
  • 向后查找
    • next()方法仅能够匹配后一个相邻的元素。用法next([expr])
    • nextAll()方法能够向后查找所有同辈元素。用法nextAll([expr])
    • nextUntil()方法能够向后查找指定范围内的同辈元素。用法nextUntil([selector])
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
//        $(".red").prev().css("border","solid 1px red");
//        $(".red").prevAll("p").css("border","solid 1px red");
//        $(".red").prevUntil("h1").css("border","solid 1px red");
//        $(".red").next("p").css("border","solid 1px red");
//        $(".blue").nextAll("p").css("border","solid 1px red");
//        $(".blue").nextUntil(".red").css("border","solid 1px red");
        // 查找同辈元素
//        $(".red").siblings("p").css("border","solid 1px red");
        // 添加查找
//        $(".red").siblings("p").add("h1,h2").css("border","solid 1px red");
        $(".red").siblings().css("border","solid 1px red");
    })
    </script>
    <title>向前向后查找</title>
</head>
<body>
<h1>回乡偶书</h1>
<h2>贺知章</h2>
<p class="blue">少小离家老大回</p>
<p>乡音未改鬓毛衰</p>
<p class="red">儿童相见不相识</p>
<p>笑问客从何处来</p>
</body>
</html>
  • 查找同辈元素
    • siblings()方法可以查找所有兄弟元素,不管其位置在前还是在后。用法siblings([expr])
  • 添加查找
    • 使用add()方法可以为查找的结果集添加新的查找内容。用法:add(expr,[context])

3、串联

jQuery链式语法能够实现在一行代码中完成各种复杂的任务。但是在很多情况下用户希望jQuery方法能够操作不同的jQuery对象,或者前后方法能够相互影响,为此jQuery提供了两个串联方法:addBack()end()

  • 合并jQuery对象addBack()
  • 返回jQuery()对象end()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
//        $("div").find("p").addBack().css({"border":"solid 1px red","margin":"4px"})
        // 当调用find("p).css()之后,再调用end()方法返回$("div")方法匹配的jQuery对象,而不是find()方法所查找到的jQuery
        $("div").find("p").css({"border":"solid 1px red","margin":"4px"}).end().css({"background":"blue","color":"white","padding":"4px"});
    })
    </script>
    <title>串联</title>
</head>
<body>
<div>
    <p>少小离家老大回,乡音未改鬓毛衰。</p>
    <p>儿童相见不相识,笑问客从何处来。</p>
</div>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,634评论 18 503
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,350评论 0 44
  • 1:jQuery节点创建与属性的处理 创建元素节点:可以有几种方式,后面会慢慢接触。常见的就是直接把这个节点的结构...
    码农小杨阅读 594评论 0 1
  • 第1章 简介 第2章 DOM节点的创建 2-1 DOM创建节点及节点属性 通过JavaScript可以很方便的获...
    mo默22阅读 800评论 0 8
  • DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作。但实际上...
    阿r阿r阅读 1,001评论 0 9