jQuery(4)

jQuery(4)

1. 几种遍历方法

1.1. each方法

1.1.1 jq对象.each()方法

遍历jQuery对象集合,为每个匹配的元素执行一个函数

语法:

$(selector).each(function(index,element))
参数 描述
function(index,element) 必需。为每个匹配元素规定运行的函数。index - 选择器的 index 位置。element - 当前的元素(也可使用 "this" 选择器)

注意: 返回的是元素, 不是jq对象

1.1.2 js Array.forEach()方法

回顾: forEach(function(item, index){}))

array.forEach(function(currentValue, index, arr), thisValue)
参数 描述
function(currentValue, index, arr) 必需。 数组中每个元素需要调用的函数。 函数参数:参数描述currentValue必需。当前元素index可选。当前元素的索引值。arr可选。当前元素所属的数组对象。
thisValue 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值

1.2. map方法

1.2.1 jq对象.map()方法

jQuery的map() 函数用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回。

$.map( object, callback )
参数 描述
object Array/Object类型 指定的需要处理的数组或对象。
callback Function类型 指定的处理函数 function(value, index){ return 数组元素}

Jquery each和map 的区别
1,回调函数的参数顺序相反,each:i,elem,map:elem,i
2,返回值不同,map返回一个新的数组,each返回原始数组
回调的返回值,each只能返回 true 和 false,map返回的是新数组的元素
3,map 的回调函数里 ,没有 this,each中的this代表当前迭代对象

1.2.2 js Array.map()方法
array.map(function(currentValue,index,arr), thisValue)
参数 描述
function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数 函数参数: 参数描述currentValue必须。当前元素的值index可选。当前元素的索引值arr可选。当前元素属于的数组对象
thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。

1.3. filter方法

1.3.1 jq对象.filter()方法

该方法让您规定一个条件。不符合条件的元素将从选择中移除,符合条件的元素将被返回到新的数组中。

该方法通常用于缩小在被选元素组合中搜索元素的范围。

$(selector).filter(criteria,function(index))
参数 描述
criteria 可选。规定要从被选元素组合中返回的选择器表达式、jQuery 对象、一个或多个元素。 提示:如需规定多个条件,请使用逗号分隔。
function(index) 可选。为集合中的每个元素规定要运行的函数。如果返回 true,则保留元素,否则元素将被移除。index - 集合中元素的 index 位置。注意: this 是当前的 DOM 元素。
$("p").filter(":even")  //返回所有偶数号的 <p> 元素
("p").filter(".intro,#outro") //返回 class 为 "intro" 和 id 为 "outro" 的所有 <p> 元素
1.3.2 js Array.filter()方法
array.filter(function(currentValue,index,arr), thisValue)
参数 描述
function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数 函数参数: 参数描述currentValue必须。当前元素的值index可选。当前元素的索引值arr可选。当前元素属于的数组对象
thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "

数组和对象是引用传递, 就算返回的是新数组, 但是里面的元素所对应的内存地址是一样的

不改变原数组的方法 ES5:slice、join、toLocateString、toStrigin、indexOf、lastIndexOf、cancat

2. 隐式迭代

基本概念

隐式迭代:jQuery在设置属性时会自动的遍历,因此我们不需要再遍历

1. jQuery在执行设置性操作时,会给所有的元素都设置上相同的值。
2. jQuery在执行获取性操作时,只会返回第一个元素对应的值。
3. 如果想要给每一个元素都设置不同的值,需要手动进行遍历jQuery对象。

3. 链式编程

链式编程的原理:设置性操作会返回一个jQuery对象,因此可以继续调用jQuery的方法。

fn1(){
console.log('fn1')
return this
}
fn2(){
console.log('fn2')
return this
}
fn3(){
console.log('fn3')
return this
}
obj.fn1().fn2().fn3()

1. 设置操作的时候,可以使用链式编程。(设置操作返回的是jq对象)
2. 获取操作的时候,无法使用链式编程(获取操作返回的往往不是jq对象)。

4. end方法

end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态。

end(); // 上一次返回的jq对象
4.1 案例: 五星好评★★★☆☆
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>五角星评分案例</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .comment {
            font-size: 40px;
            color: #ff16cf;
        }

        .comment li {
            float: left;
        }

        ul {
            list-style: none;
        }
    </style>
</head>

<body>
    <ul class="comment">
        <li>☆</li>
        <li>☆</li>
        <li>☆</li>
        <li>☆</li>
        <li>☆</li>
    </ul>
    <script src="./js/jquery-1.12.4.js"></script>
    <script>
        $(function () {
            const star_k = '☆'
            const star_s = '★'
            const $lis = $('li')

            //1. 鼠标移入
            $lis.on('mouseenter', function () {
                //1.1 把当前的变成实心
                // $(this).text(star_s)
                //1.2 把前面的变成实心
                // $(this).prevAll().text(star_s)
                //1.3 把后面的变成空心
                // $(this).nextAll().text(star_k)

                // 链式编程
                // $(this).text(star_s).prevAll().text(star_s).nextAll().text(star_k) //错误
                //分析:
                //移入第三个星星
                // console.log($(this).text(star_s))   //返回第一个li
                // console.log($(this).text(star_s).prevAll())     //返回第一个li, 第二个li
                // console.log($(this).text(star_s).prevAll().text(star_s)) //返回第一个li, 第二个li
                // console.log($(this).text(star_s).prevAll().text(star_s).nextAll()) //返回第一个li, 第二个li, 第三个li, 第四个li   !!!!!!!!!

                //正确写法
                //end()方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态。
                $(this).text(star_s).prevAll().text(star_s).end().nextAll().text(star_k)
            })

            //2. 鼠标点击
            $lis.on('click', function () {
                // 2.0 判断当前的class是否为selct, 是的话移除select
                if ($(this).hasClass('select')) {
                    $(this).removeClass('select')
                    return
                }
                //2.1 标记当前的li, class为select, 其余的删除
                $(this).addClass('select').siblings().removeClass('select')
                //2.2 把当前select的变成实心, 前面的变成实心, 后面的变成空心
                $('.select').text(star_s).prevAll().text(star_s).end().nextAll().text(star_k)
            })

            //3. 鼠标移出
            $('ul').on('mouseleave', function () {
                console.log('鼠标移出')
                //3.1 先清空所有实心
                $lis.text(star_k)
                //3.2 把当前select的变成实心, 前面的变成实心, 后面的变成空心
                $('.select').text(star_s).prevAll().text(star_s).end().nextAll().text(star_k)
            })
        })
    </script>
</body>

</html>
$(this).text(star_s).prevAll().text(star_s).end().nextAll().text(star_k)//end()后还原成this了
prevAll();//获取前面所有的兄弟元素
nextAll();//获取后面所有的兄弟元素
siblings();//获取所有的兄弟元素
prev();//获取前一个兄弟
next();//获取后一个兄弟。

5. 多库共存

jQuery使用$作为标示符,但是如果与其他框架中的\(冲突时,jQuery可以释放`\)`符的控制权.

var myjq = $.noConflict();//释放$的控制权,并且把$的能力给了c
//原来$('p')
//现在:
myjq('p')

6. jQuery插件

插件:jquery不可能包含所有的功能,我们可以通过插件扩展jquery的功能。

jQuery有着丰富的插件,使用这些插件能给jQuery提供一些额外的功能。

使用插件:

1. 引入jQuery文件
2. 引入插件(如果有用到css的话,需要引入css)
3. 使用插件

常用插件的使用

上一篇:Github上标星82.1K+star面试笔记,可以帮你搞定95%以上的Java面试,已经帮助多人拿下offer


下一篇:如何解决升级win10 1909系统后开机很慢的问题