jQuery基础学习随笔 2022

【2022年9月25日】

parents()   -返回指定祖先元素

返回指定祖先元素,如:

<div id="div1">
    <div id="div2">
        <div id="div3">
            我在div3
        </div>
    </div>
</div>
// 使用 parent() 时,从div3找到div1,需要多个parent()
$("#div3").parent().parent().parent();

// 使用 parents() ,即可快速找到指定祖先元素
$("#div3").parents();                           //找到了div3以上的祖先元素:div2、div1、body、html
console.log(   $("#div3").parents("#div1") );    // 返回指定祖先元素div1

 

toFixed()   -保留指定位数的小数

保留指定位数的小数。
let num = 89.111
console.log( num.toFixed(2) );      //  89.11

 

 

each()   -遍历元素

语法:

$("div").each(function(index, domEle) {
    xxx;
    console.log(index);  // 返回每个元素的索引号
    console.log(my_domEle);  //返回每个DOM元素对象 
})

// each() 方法遍历匹配的每一个元素,主要用DOM处理
// 里面的回调函数有两个参数,index是每个元素的索引号,domEle是每个DOM元素对象,不是jQuery对象!
// 所以使用jQuery方法,需要转换:$(domEle)

 

$.each()   -遍历元素,主要处理数据,如数组 对象 

 语法:

$.each( Obj, function(index, domEle) {
    xxx;
    console.log(index);    //返回每个元素的索引号
    console.log(domEle);   //返回每个DOM元素对象 
})

// 与第一种each()类似
// Obj 如果写元素,直接写jQuery对象,语法为 $.each( $("div"),function... )

元素、数组、对象:

// 遍历元素
    $.each( $("div"), function(i, Ele) {
        console.log(i);   //遍历每一个元素的索引号
        console.log(Ele); //遍历每一个DOM元素对象内容
    })
// 遍历数组
    let arrColor = ["red","blue","pink"];
    $.each( arrColor, function(i, Ele) {
        console.log(i);    //数组里面的每一个索引号
        console.log(Ele);  //数组里面的每一个值
    })
// 遍历对象
    $.each( {
        name: "穗",
        age: "21岁",
        addr: "河北省"
    }, function(i, Ele) {
        console.log(i);    // 对象里的每一个 属性名    name,age,addr....
        console.log(Ele);  // 对象里的每一个 属性值    穗,21岁,河北省....
    } );

 

尺寸方法:

1. $("div").width()  、 height()  获取设置元素 width和height的大小
2. $("div").innerWidth() 、innerHeight()  获取设置元素 width和height 带padding大小
3. $("div").outerWidth() 、outerHeight()  获取设置元素width和height 带padding和border大小
4. $("div").outerWidth(true)、outerHeight(true)  获取设置元素width和height 带padding border margin大小
 
以上参数为空,则是获取相应值,返回的是数字型。
如果参数为数字,则是修改相应值。
参数可以不带单位。
innerWidth() 带padding,其中inner英文的意思为 内部
outerWidth() 带padding和border,其中outer英文的意思为 外部
 

位置方法(偏移):

offset()    --获取设置距离文档的位置(偏移) 。

$("div").offset()
$("div").offset().left      // 得到对于文档的左侧的偏移,跟父级没有关系
 
$("div").offset({
                top:200,
                left:300
});     // 在括号里写设置的值,以对象的形式
 

position()    --获取元素偏移,相对于‘带有定位的父级’偏移坐标,无父级则以文档为准。

$("span").position()
$("span").position().left
 
// 此方法只能获取,但不能设置
//console.log( $("span").position({left:99, top:99}) );    // 是错误的
 
 
scrollTop() 、 scrollLeft()    --设置或获取元素被卷去的头部和左侧。
 
$(window).scroll(function() {
    console.log(  $(document).scrollTop()  );
    if ($(document).scrollTop() >= 200) {
        console.log("div已经碰到顶部了!被卷去的大于200px");
    }
})

// 不仅可以获取卷去的值,还可以设置要卷去的值
            $("button").click(function() {
                $(document).scrollTop(100);     //点击后滚动卷去100px
            })
 
scrollTop() 、 scrollLeft()    --返回顶部(带动画的
// 因为是元素做动画,所以不能写文档,而是html和body元素做动画。先stop()停止之前动画,然后animate()设置。
// 其中animate动画函数里有一个scrollTop属性,可以设置位置。
$("body,html").stop().animate({
    scrollTop: 0
});
 
 

on  -绑定事件

// 单个注册事件 ele.事件(function() {})
$("div").click(function() { })
 
// on 事件处理 绑定事件
// on()方法匹配元素上绑定一个或多个事件的事件处理函数。
// 语法:ele.on(events, [selector], fn)
// events:一个或多个空格分隔的事件类型,如click。
// selector:元素的子元素选择器。     fn:回调函数。
 
            $("div").on({
                click:function() {
                    $(this).css("background", "#aaffcc");
                },
                mouseleave:function() {
                    $(this).css("background","#ffc0cb");
                }
            })
// 如果事件处理程序相同
            $("div").on("click mouseleave", function() {
                alert("你的鼠标点击 或 鼠标离开了");
            })
// on可以实现事件委托(委派)
            $("ul").on("click", "li", function() {
                alert("父元素ul绑定了事件,但触发的对象是里面的子元素li");
            })
// on可以给未来动态创建的元素绑定事件
            /* $("ol").click(function() {
                alert("111");    // 该事件对于未来后期创建的元素,不生效
            }) */

            $("ol").on("click", "li", function() {
                alert("111");
            });

            let li = $("<li>后来创建的li</li>");
            $("ol").append(li);
 
 

off() - 事件解绑

// 1. 事件解绑 off()
            $("div").off();             // 解绑了div身上的所有事件
            $("div").off("click");      // 解绑了div的click事件

            $("ul").off("click", "li");  // 解绑事件委托
 

one()  - 只触发事件一次

// 1. one() 只触发事件一次
            $("p").one("click", function() {
                alert("one()只触发一次,一次性的");
            });
 

triggter()  - 自动触发事件

// 自动触发事件
            
// 1. 元素.事件()                // 第一种简写形式
// $("p").click();  //自动触发,不需要鼠标点击

// 2. 元素.trigger("事件")       // 第二种自动触发模式  
// $("p").trigger("click");

// 3. 元素.triggerHandler("事件") //第三种自动触发模式,但不触发元素的默认行为
// $("p").triggerHandler("click");


//* html code: <input type="text">  *//

$("input").on("focus", function() {
    $(this).val("获得焦点就显示出这句话");
});

//$("input").focus();               // 自动触发,并触发元素默认行为,有焦点和光标
$("input").triggerHandler("focus"); // 自动触发,无焦点,无光标
 

jQuery事件对象

// 1. 事件对象

            $(document).on("click", function() {
                console.log("点击了页面document");
            })

            $("div").on("click", function(event) {
                console.log(event);
                console.log("点击了div");

                // 当点击 div 时,会冒泡到 document 并输出相应文字
                event.stopPropagation();    //阻止冒泡行为,就不会冒泡到document了
            })
 

jQuery对象拷贝

 
/*
    $.extend( [deep], target, obj, [objN] )
    deep : 如果为true为深拷贝,默认为false浅拷贝
    target : 要拷贝的目标对象
    obj : 待拷贝到的第一个对象的对象
*/

            console.log("===(2)===");
            let tar2 = {};
            let obj2 = {
                id: 1,
                name: "niii"
            };
            $.extend(tar2, obj2);   // 浅拷贝到tar2
            console.log(tar2);

            console.log("===(3)===");
            let tar3 = {
                id:123456
            };
            let obj3 = {
                id: 1,
            };
            $.extend(tar3, obj3);   // 浅拷贝会覆盖tar3里面原来的数据,也叫合并
            console.log(tar3);

            console.log("===(4)===");
            let tar4 = {
                id:123456
            };
            let obj4 = {
                id: 1,
                msg:{
                    age: 18
                }
            };
            $.extend(tar4, obj4);   // 复杂数据类型的也会拷贝过去,修改tar4的age,obj4的age也会更改
            tar4.msg.age = 20;      //修改了tar4的age为20
            console.log(tar4);      //20
            console.log(obj4);      //20

    // 浅拷贝是把被拷贝的对象「复杂数据类型中的地址」拷贝给目标对象,修改目标对象会影响被拷贝对象。

            console.log("===(5)===");
            let tar5 = {
                msg:{
                    age: 18
                }
            };
            let obj5 = {
                msg:{
                    name: "aaa"
                }
            };
            $.extend(tar5, obj5);    // obj5的msg覆盖掉tar5的smg,只保留了name:"aaa"
            console.log(tar5);       // name: "aaa"

    // 深拷贝,前面加true,完全克隆(拷贝的对象,而不是地址),修改目标对象不会影响被拷贝对象。
    // 复杂数据类型开辟新的内存空间,独立,不受目标对象修改影响,不会覆盖。
    // 如果里面有不冲突的属性,会合并到一起。

            console.log("===(6)===");
            let tar6 = {
                id: 0,
                msg:{
                    age: 18
                }
            };
            let obj6 = {
                id: 1,
                msg:{
                    name: "aaa"
                }
            };
            $.extend(true, tar6, obj6);     // name和age不冲突,合并在一起
            tar6.msg.name = "bbb";          //拷贝后,修改了tar数据,tar和obj的msg都是独立的,互不干扰
            console.log(tar6);              //id:1 , msg:{age:18,name:"aaa"}
            console.log(obj6);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

posted @ 2022-09-21 17:32  nekmea  阅读(19)  评论(0编辑  收藏  举报