JQuery选择器

通过选择器,可以获取到页面元素。jQuery具有强大的选择器,跟CSS3选择器类似

1 基本选择器

#id            根据给定的ID匹配一个元素
element        根据给定的元素标签名匹配所有元素
.class        根据给定的css类名匹配元素。
*            匹配所有元素
selector1,selector2,selectorN    将每一个选择器匹配到的元素合并后一起返回

2 层级选择器

ancestor descendant    在给定的祖先元素下匹配所有的后代元素
parent>child        在给定的父元素下匹配所有的子元素
prev+next            匹配所有紧接在 prev 元素后的 next 元素
prev~siblings        匹配 prev 元素之后的所有 siblings 元素

3 过滤选择器

:first            获取第一个元素
:not(selector)    去除所有与给定选择器匹配的元素
:even            匹配所有索引值为偶数的元素,从 0 开始计数
:odd            匹配所有索引值为奇数的元素,从 0 开始计数
:eq(index)        匹配一个给定索引值的元素
:gt(index)        匹配所有大于给定索引值的元素
:lang           选择指定语言的所有元素。1.9+
:last            获取最后个元素
:lt(index)        匹配所有小于给定索引值的元素
:header            匹配如 h1, h2, h3之类的标题元素
:animated        匹配所有正在执行动画效果的元素
:focus            匹配当前获取焦点的元素
:root           选择该文档的根元素   1.9+
:target         选择由文档URI的格式化识别码表示的目标元素    1.9
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本筛选器 --- jquery选择器</title>
    <style>
        ul {
            width: 600px;
            list-style:none;
            padding:0;
        }
        li {
            border: 1px solid #ccc;
            padding: 10px;
            margin:5px 0px;
        }
    </style>
</head>
<body>
    <h1>选择器</h1>
    <hr>

    <ul>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.
            <ol>
                <li>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li class='item'>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
            </ol>
        </li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
    </ul>

    <script src="../jquery-3.3.1.js"></script>
    <script>
        // $等同于jQuery
        $(function(){

            //:first
            // $('li:first').css('background-color','red'); //等价于---匹配所有li元素中的第一个
            // JQuery('li:first').css('background-color','red'); //

            // $('li:last').css('background-color','pink');     //匹配所有li元素中的最后一个
            $('li:eq(4)').css('background-color','blue'); //从0开始,匹配索引是4的元素,不会区分
            $('li:odd').css('background-color', 'green'); //匹配所有li元素索引为奇数的元素
            $('li:even').css('background-color', ' yellow');   //匹配所有li元素索引为偶数的元素
            $('li:gt(3)').css('background-color', 'purple');  //匹配所有li索引大于3的元素,不包括3
            $('li:lt(3)').css('background-color', 'skyblue');  //匹配所有li索引小于3的元素,不包括3
            $('li:not(".item")').css('background-color', '#ff6700');  //匹配所有li中除类是item的所有元素



        })
    </script>
</body>
</html>
过滤选择器
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>菜单实例</title>
    <style>
        ul {
            padding:0;
            margin:0;
            list-style: none;
        }
        .nav {
            width: 120px;
        }
        .nav h2 {
            margin:0;
            font-size: 16px;
            font-weight: normal;
            padding: 0px 20px;
            height: 40px;
            line-height: 40px;
            border:1px solid #999;
            border-bottom:none;
            background: #369;
            cursor: pointer;
        }
        .nav ul {
            border:1px solid #999;
            display: none;
        }
        .nav li a{
            color:#333;
            font-size: 14px;
            text-align: center;
            text-decoration: none;
            display: block;
            padding: 0px 20px;
            height: 30px;
            line-height: 30px;
            border-bottom:1px solid #999;
        }
        .nav li:last-child a {
            border-bottom:none;
        }
    </style>
</head>
<body>
    <h1>后台管理</h1>
    <hr>

    <div class="nav">
        <h2>用户管理</h2>
        <ul>
            <li><a href="#">用户列表</a></li>
            <li><a href="#">用户添加</a></li>
            <li><a href="#">用户删除</a></li>
            <li><a href="#">用户修改</a></li>
        </ul>

        <h2>订单管理</h2>
        <ul>
            <li><a href="#">订单列表</a></li>
            <li><a href="#">订单添加</a></li>
            <li><a href="#">订单删除</a></li>
            <li><a href="#">订单修改</a></li>
        </ul>


        <h2>商品管理</h2>
        <ul>
            <li><a href="#">用户列表</a></li>
            <li><a href="#">用户添加</a></li>
            <li><a href="#">用户删除</a></li>
            <li><a href="#">用户修改</a></li>
        </ul>

        <h2>评论管理</h2>
        <ul>
            <li><a href="#">用户列表</a></li>
            <li><a href="#">用户添加</a></li>
            <li><a href="#">用户删除</a></li>
            <li><a href="#">用户修改</a></li>
        </ul>
    </div>

    <script src="../jquery-3.3.1.js"></script>
    <script>
        $(function(){
            $('.nav ul:first').show();
            $('.nav h2').on('click', function(){
                $(this).next('ul').slideDown().siblings('ul').slideUp();
            })
        })
    </script>
</body>
</html>
实战:手风琴菜单

4 内容选择器

:contains(text)    匹配包含给定文本的元素
:empty            匹配所有不包含子元素或者文本的空元素
:has(selector)    匹配含有选择器所匹配的元素的元素
:parent            匹配含有子元素或者文本的元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jquery内容选择器</title>
    <style>
        ul {
            width: 600px;
            list-style:none;
            padding:0;
        }
        li {
            border: 1px solid #ccc;
            padding: 10px;
            margin:5px 0px;
        }
    </style>
</head>
<body>
    <h1>选择器</h1>
    <hr>

    <ul>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.
            <ol>
                <li>Lorem ipsum 小丽丽 dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li class='item'>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li></li>
            </ol>
        </li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor 小丽丽sit amet.</li>
        <li></li>
        <li>Lorem ipsum dolor sit amet.</li>
    </ul>

    <script src="../jquery-3.3.1.js"></script>
    <script>
        $(function(){
            $("li:contains('小丽丽')").css('background-color', ' red');  //匹配包含文本内容为'小丽丽'的元素
            $("li:has('.item')").css('background-color', ' green');// 匹配含有选择器为item的元素的  元素
            $("li:empty").css('background-color', ' pink'); //没有子元素,也不能有内容(也就是一个空标签)
            $("li:parent").css('background-color', ' skyblue'); //有子元素 或有内容
        })
    </script>
</body>
</html>
内容选择器

5 可见性选择器

:hidden        匹配所有不可见元素,或者type为hidden的元素
:visible    匹配所有的可见元素

6 属性选择器

[attribute]            匹配包含给定属性的元素
[attribute=value]    匹配给定的属性是某个特定值的元素
[attribute!=value]    匹配所有不含有指定的属性,或者属性不等于特定值的元素
[attribute^=value]    匹配给定的属性是以某些值开始的元素
[attribute$=value]    匹配给定的属性是以某些值结尾的元素
[attribute*=value]    匹配给定的属性是以包含某些值的元素
[attrSel1][attrSel2][attrSelN]    复合属性选择器,需要同时满足多个条件时使用

7 子元素选择器

:first-child        匹配所给选择器( :之前的选择器)的第一个子元素
:first-of-type      结构化伪类,匹配E的父元素的第一个E类型的孩子        1.9+
:last-child            匹配最后一个子元素
:last-of-type       结构化伪类,匹配E的父元素的最后一个E类型的孩子    1.9+
:nth-child()        匹配其父元素下的第N个子或奇偶元素        
:nth-last-child()    选择所有他们父元素的第n个子元素。计数从最后一个元素开始到第一个    1.9+
:nth-last-of-type()    选择的所有他们的父级元素的第n个子元素,计数从最后一个元素到第一个    1.9+
:nth-of-type()      选择同属于一个父元素之下,并且标签名相同的子元素中的第n个    1.9+
:only-child            如果某个元素是父元素中唯一的子元素,那将会被匹配
:only-of-type          选择所有没有兄弟元素,且具有相同的元素名称的元素    1.9+

8 表单选择器

:input            匹配所有 input, textarea, select 和 button 元素
:text            匹配所有的单行文本框
:password        匹配所有密码框
:radio            匹配所有单选按钮
:checkbox        匹配所有复选框
:submit            匹配所有提交按钮,匹配 type="submit" 的input或者button
:image            匹配所有图像域
:reset            匹配所有重置按钮
:button            匹配所有按钮
:file            匹配所有文件域
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单选择器</title>
</head>
<body>
    <input type="text" name="" id=""> <br>
    <input type="password" name="" id="" disabled> <br>

    <select name="" id="">
        <option value="1">1</option>
        <option value="1" selected>2</option>
        <option value="1">3</option>
        <option value="1">4</option>
    </select>
    
    
    <script src="../jquery-3.3.1.js"></script>
    <script>
        $(function(){

            $(':text').css('background-color','yellow');  //匹配所有的单行文本框
            $(':input').css('border', '3px solid red'); //匹配所有的表单控件,input, textarea, select 和 button 元素

            $(':enabled').css('border', '2px solid purple')  //匹配所有可用元素,因为password被设置为disabled所以不会被匹配到
            $(':selected').css('background-color', '#ff6700'); //设置的是option,匹配所有选中的option元素,select中第二个option设置了selected所以会被选中
        })
    </script>
</body>
</html>
表单选择器

9 表单对象选择器

:enabled        匹配所有可用元素
:disabled        匹配所有不可用元素
:checked        匹配所有选中的被选中元素(复选框、单选框等,select中的option)
:selected        匹配所有选中的option元素

10筛选器

10.1过滤

eq(index|-index)        获取当前链式操作中第N个jQuery对象,返回jQuery对象
first()                    获取第一个元素
last()                    获取最后个元素
filter(expr|obj|ele|fn)    筛选出与指定表达式匹配的元素集合。
not(expr|ele|fn)        从匹配元素的集合中删除与指定表达式匹配的元素
has(expr|ele)            保留包含特定后代的元素,去掉那些不含有指定后代的元素。
slice(start,[end])        选取一个匹配的子集
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>筛选器</title>
    <style>
        ul {
            width: 600px;
            list-style:none;
            padding:0;
        }
        li {
            border: 1px solid #ccc;
            padding: 10px;
            margin:5px 0px;
        }
    </style>
</head>
<body>
    <h1>筛选器</h1>
    <hr>

    <ul>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.
            <ol>
                <li>Lorem ipsum 小丽丽 dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li class='item'>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <div>asdfasdfasdfasdfsadf</div>
            </ol>
        </li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li></li>
        <li>Lorem ipsum dolor sit amet.</li>
    </ul>

    <script src="../jquery-3.3.1.js"></script>
    <script>
        $(function(){
            $('li').first().css('background-color', 'red');     //获取第一个元素
            $('li').last().css('background-color', 'red');     //获取最后一个元素
            $('li').eq(3).css('background-color', 'red');      //获取当前链式操作中s索引为3的jQuery对象,返回jQuery对象
            $('li').filter('.item').css('background-color', 'red');  //过滤出类为item的元素
            $('li').not('.item').css('border', '2px solid red');    //过滤出类不是item的所有li元素
            $('li').has('.item').css('border', '2px solid red'); //匹配后代包含类为item的元素,后代元素不会被添加样式
            $('li').slice(4,10).css('background-color', 'red');   //索引为4到9的所有li元素,不是li元素不会被算在索引范围内,顾头不顾尾

        })
    </script>
</body>
</html>
过滤

10.2 查找

 查找子元素

children([expr])        取得一个包含匹配的元素集合中每一个元素的所有子元素的元素集合。
find(e|o|e)                搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法

查找父元素 parent([expr]) 取得一个包含着所有匹配元素的唯一父元素的元素集合 parents([expr]) 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素) parentsUntil([e|e][,f]) 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止 offsetParent() 返回第一个匹配元素用于定位的父节点。
兄弟元素 next([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合 nextAll([expr]) 查找当前元素之后所有的同辈元素 nextUntil([e|e][,f]) 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止 prev([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合 prevall([expr]) 查找当前元素之前所有的同辈元素 prevUntil([e|e][,f]) 查找当前元素之前所有的同辈元素,直到遇到匹配的那个元素为止 siblings([expr]) 取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合
其他 closest(e|o|e) 1.7* 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>筛选器</title>
    <style>
        ul {
            width: 600px;
            list-style:none;
            padding:0;
            position: relative;
        }
        li {
            border: 1px solid #ccc;
            padding: 10px;
            margin:5px 0px;
        }
    </style>
</head>
<body>
    <h1>筛选器</h1>
    <hr>

    <ul>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li id="myItem">Lorem ipsum dolor sit amet.
            <ol>
                <li>Lorem ipsum 小丽丽 dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
                <li class='item'>Lorem ipsum dolor.</li>
                <li>Lorem ipsum dolor.</li>
            </ol>

            <ul>
                <li>lorem</li>
                <li>lorem</li>
                <li>lorem</li>
            </ul>
        </li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li></li>
        <li>Lorem ipsum dolor sit amet.</li>
    </ul>

    <script src="../jquery-3.3.1.js"></script>
    <script>
        $(function(){
            //破坏性操作
            $('#myItem').css('border', '2px solid red');

            //所有的子元素
            $('#myItem').children().css('border', '2px solid red'); //  取得一个包含匹配的元素集合中每一个元素的所有  子元素的元素集合。
            $('#myItem').find('ul').css('border', '2px solid red'); // 搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法


            //查找父元素
            $("#myItem").parent().css('border', '2px solid green');  // 取得一个包含着所有匹配元素的唯一父元素的元素集合,这里父元素是ul
            $("#myItem").parents('ul').css('border', '2px solid green');  //所有的祖先元素,中类为ul的元素
// 
            $("#myItem").parentsUntil('body').css('border', '2px solid green');  //所有的祖先元素 指定一个结束位置,从myItem的父元素开始到body结束
            $("#myItem").offsetParent().css('border', '2px solid green');  //最先定位的祖先元素


            //查找兄弟元素
            $('#myItem').next().css('border', '2px solid red');      //紧邻自己的下一个兄弟元素
            $('#myItem').nextAll(':empty').css('border', '2px solid red'); //自己往下的所有兄弟元素,标签内容为空的兄弟元素
            $('#myItem').nextUntil(':empty').css('border', '2px solid red');  //自己一下的所有兄弟元素,到标签内容为空的结束,不包括标签为空的元素
            
            $('#myItem').prev().css('border', '2px solid red');   //紧邻自己的上一个兄弟元素
            $('#myItem').prevAll().css('border', '2px solid red');  //自己往上的所有兄弟元素

            $('#myItem').siblings(':parent').css('background-color','pink');  //除了自己的所有兄弟元素,空标签不会被选中

            //从自己开始 往上 找 找到第一个满足条件的,自己满足条件就不会再往上找,不满足才会继续往上找
            $('.item').closest('ol').css('border', '2px solid red');
        })
    </script>
</body>
</html>
查找

10.3 串联

add(e|e|h|o[,c])           1.9* 把与表达式匹配的元素添加到jQuery对象中
andSelf()                1.8- 加入先前所选的加入当前元素中
addBack()                  1.9+ 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器。
contents()                查找匹配元素内部所有的子节点(包括文本节点)
end()                    回到最近的一个"破坏性"操作之前
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>筛选器串联</title>
    <style>
        ul {
            list-style:none;
            width: 600px;
            padding: 0px;
        }
        li {
            border:1px solid #ccc;
            padding:10px;
            margin:5px 0px;
        }
        li.active {
            background: #f5f5f5
        }

        p {
            padding: 20px;
            width: 800px;
            border: 2px dashed #ccc;
        }
    </style>
</head>
<body>
    <h1>串联</h1>
    <hr>

    <ul class="list">
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li class="active">Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
        <li>Lorem ipsum dolor sit amet.</li>
    </ul>

    <div class="article">
        <p>Lorem ipsum dolor sit amet.</p>
        <p>Lorem ipsum dolor sit amet.</p>
        <p>Lorem ipsum dolor sit amet.</p>
        <p>Lorem ipsum dolor sit amet.</p>
        <p>Lorem ipsum dolor sit amet.</p>
    </div>

    <script src="../jquery-3.3.1.js"></script>
    <script>
        $(function(){
            $('.list li').add('p').css('border', '2px solid purple')  //把与表达式匹配的元素添加到jQuery对象中,相当于并集
            $('li.active').nextAll('li').addBack().css('border', '2px solid red')  //会选中类为li往下的所有兄弟元素,addBack会把自己也选中,然后取他们的并集
            $('li.active').nextAll('li').css('border', '2px solid red').end().css('background', 'pink');//end()  回到最近的一个"破坏性"操作之前,选中的也就是自己往下的所有兄弟元素和自己


            console.log($('.list').contents())     //查找匹配元素内部所有的子节点(包括文本节点)

            $('li').html('HELLO') //innerHTML    jQuery改变HTML中指定标签中的文本内容  
            $('li').text('HELLO'); //innerText   
            
        })
    </script>
</body>
</html>
串联

10.4 其他元素处理

is(expr|obj|ele|fn)        根据选择器、DOM元素或 jQuery 对象来检测匹配元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true
map(callback)            将一组元素转换成其他数组(不论是否是元素数组)

原文地址:https://www.cnblogs.com/sui776265233/p/9483846.html