标签: jQuery

  • jQuery中的AJAX

    GET

    $.get(url,[data],[callback])

    url:请求地址

    data:请求时携带的参数

    callback:请求成功的回调函数

    $.get('https://api.liaooo.cn/api', { id: 1, name: 2 }, function (result) {})
    

    POST

    $.post(url,[data],[callback])

    url:请求地址

    data: 要提交的数据

    callback:请求成功的回调函数

    通过$.ajax()发送请求

    $.ajax(url,[settings])

    $.ajax({
    	type: 'GET',	//请求方式
    	url: 'https://api.liaooo.cn/api', //请求的URL地址
    	data: { id: 1, name: 2 }, //请求携带的数据
    	success: function(result){ }, //请求成功回调
    })
    

    https://jquery.cuishifeng.cn/jQuery.Ajax.html

  • jQuery

    jQuery对象

    用jQuery方式获取过来的对象是jQuery对象.

     $("div");  // $("div")是一个jQuery 对象
    

    jQuery 对象只能使用 jQuery 方法

    jQuery对象转换为DOM对象

    //加上索引号即可转为DOM对象,可以使用DOM对象的方法
    $("div")[0]
    $("div").get(0)
    

    隐式迭代

    隐式迭代就是把匹配的所有元素内部进行遍历循环.

    <div>我们一起被修改</div>
    <div>我们一起被修改</div>
    <div>我们一起被修改</div>
    <div>我们一起被修改</div>
    
    <script>
    $("div").css("background", "pink");
    //隐式迭代直接把元素遍历了一遍,可以直接修改所有div样式
    </script>
    

    筛选选择器

    $(function() {
        $("ul li:first").css("color", "red"); //:first :last
        $("ul li:eq(2)").css("color", "blue"); //选择第n个元素 :eq(n)
        $("ol li:odd").css("color", "skyblue"); //奇数
        $("ol li:even").css("color", "pink"); //偶数
      	//注意:索引号从0开始
    })
    

    筛选方法

    parent()

    查找最近父级

    $("li").parent();

    parents()

    可返回指定父级,如果参数为空,返回所有父级.

    $("li").parents("选择器");

    children(“选择器”)

    相当于$("ul>li")最近一级(亲儿子)

    $("ul").children("li");

    find(“选择器”)

    相当于$("ul li"),后代选择器

    $("ul").find("li");

    siblings(“选择器”)

    查找兄弟节点(不包括自己)

    $(".first").siblings("li");

    eq(index)

    相当于$("li:eq(2)");方法里面可以换成变量,比较灵活

    $("li").eq(2);

    nextAll()

    查找当前元素之后的所有同辈元素

    $(".first").nextAll();

    prevtAll()

    查找当前元素之前的所有同辈元素

    $(".last").prevtAll();

    hasClass(“类名”)

    查找元素是否含有某个类,返回值true or false.

    $("div").hasClass("box");

    得到当前元素索引号

    方法

    $(this).index();

    排他思想

    利用查找兄弟元素的方法

    siblings("选择器") 选择兄弟节点,除了自己

    $("div").eq(1).show();
    $("div").eq(1).siblings().hide();
    

    链式编程

    //上个小节的代码可以改写为这样
    $("div").eq(1).show().siblings().hide();
    

    操作CSS方法

    参数只写属性名,返回值是属性值.

    $("div").css("color"); //#333
    

    修改CSS样式

     $("div").css("属性名","属性值");
    //逗号分隔,属性必须加引号,值是数字不用加单位和引号
    

    修改多个CSS样式(利用对象)

     $("div").css({
       	 属性名:"属性值"  //如果值不是数字,则需要加引号
         width: 400,
         color:"lightblue"
         backgroundColor: "red" // 如果是复合属性则必须采取驼峰命名法
     });
    

    设置类样式方法(原生的classList)

    添加类

    $("div").addClass("active");
    

    移除类

    $("div").removeClass("active");
    

    切换类

    $("div").toggleClass("active");
    //有就移除,没有就添加
    

    jQuery效果

    []内表示可以省略

    speed:三种预定速度之一的字符串(“slow”,”normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)

    easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供”linear” 和 “swing”.

    fn:在动画完成时执行的函数,每个元素执行一次.

    停止排队

    stop()

    必须写在动画的前面,相当于结束上一次动画.

    显示 / 隐藏 / 切换

    show([speed],[easing],[fn])

    hide([speed],[easing],[fn])

    toggle([speed],[easing],[fn])

    滑动

    slideDown([speed],[easing],[fn])

    slideUp([speed],[easing],[fn])

    slideToggle([speed],[easing],[fn])

    事件切换

    hover([overfn,]outfn)

    相当于mouseovermouseout

    hover(fn1(){},fn2(){})
    //over:鼠标移到元素上要触发的函数
    //out:鼠标移出元素要触发的函数
    //如果只写一个函数,则鼠标移入移出都会触发
    

    淡入淡出

    fadeIn([speed],[easing],[fn])

    fadeOut([speed],[easing],[fn])

    fadeToggle([speed],[easing],[fn])

    fadeTo(speed,opacity,[easing],[fn]) //时间和透明度必须写

    自定义动画

    animate(params,[speed],[easing],[fn])

    params:一组包含作为动画属性和终值的样式属性和及其值的集合

    获取属性

    获取元素固有属性值

    获取属性值ele.prop("属性名")

    修改属性值ele.prop("属性名",[值])

    获取自定义属性值

    自定义和自带的都能用

    获取自定义属性值ele.attr("自定义属性名")

    //类似原生 getAttribute()

    修改自定义属性值ele.attr("自定义属性名",[值])

    //类似原生 setAttribute()

    H5新增的data-*也可以用这个方法得到

    数据缓存

    data([key],[value])

    当参数只有一个key的时候,为读取该jQuery对象对应DOM中存储的key对应的值,值得注意的是,如果浏览器支持HTML5,同样可以读取该DOM中使用 data-[key] = [value] 所存储的值.

    设置

     $("span").data("uname", "andy");
     //不会出现在DOM上,存在内存中
    

    使用

     $("span").data("uname"); //andy
    

    读取的data-[key]值

    <div data-test="this is test" ></div>
    
    $("div").data("test"); //this is test!;
    //不需要加data-
    

    jQuery 内容文本值

    获取设置元素内容 html()

    console.log($("div").html());

    修改内容

    $("div").html("123");

    获取设置元素文本内容 text()

    console.log($("div").text());

    修改内容

    $("div").text("123");

    获取设置表单值 val()

    console.log($("input").val());

    修改内容

    $("input").val("123");

    遍历元素

    $().each(fn("索引号",对应DOM对象))

    主要用于遍历DOM对象

    两个参数均可自己命名

    <div>1</div>
    <div>2</div>
    
    $("div").each(function(i, domEle) {
    
    // 0 1
    console.log(i);
      
    //<div>1</div>
    //<div>2</div>
    console.log(domEle); 
    
    })
    

    $.each(arr,fn(索引号,ele){})

    主要用于遍历数据,处理数据.

    $.each({
        name: "andy",
        age: 18
    }, function(i, ele) {
        console.log(i); // 输出的是 name age 属性名
        console.log(ele); // 输出的是 andy  18 属性值
    })
    

    创建添加删除元素

    创建

    $("<li> 小li </li>");

    添加

    内部添加(和获取元素是父子关系)

    放到最后一个$("ul").append($("<li> 小li </li>"));

    $("ul").prepend($("<li> 小li </li>"));放到第一个

    外部添加(和获取元素是兄弟关系)

    放到后面$("div").after("<div>新的div</div>");

    $("div").before("<div>新的div</div>");放到前面

    删除

    删自己$("div").remove();

    //删子元素

    $("div").empty(); 相当于清空自己的所有内容

    $("div").html(""); 相当于修改元素内的内容

    jQuery 尺寸

    width() / height()

    获取设置元素 width和height大小

    $("div").width()

    innerWidth() / innerHeight()

    获取设置元素 width 和 height + padding 大小

    $("div").innerWidth()

    outerWidth() / outerHeight()

    获取设置元素 width 和 height + padding + border 大小

    $("div").outerWidth()

    outerWidth(true) / outerHeight(true)

    获取设置 width 和 height + padding + border + margin

    $("div").outerWidth(true)

    jQuery 位置

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

    与父级无关

    $("div").offset()

    有两个属性lefttop

    获取$("div").offset().top;

    设置偏移$("div").offset({top:100,left:30});

    获取距离带有定位父级位置(偏移) position

    如果没有带有定位的父级,则以文档为准

    position方法不能设置偏移,其余用法和offset一样

    被卷去的头部

    被卷去的头部scrollTop()

    被卷去的左侧scrollLeft()

    填数值可以将页面跳转到对应位置

    返回顶部小例子

    注意是获取body和html元素,而不是文档

    $("body, html").stop().animate({
        scrollTop: 0
    });
    // $(document).stop().animate({
    //     scrollTop: 0
    // }); 不能是文档而是 html和body元素做动画
    

    jQuery 事件处理

    单个事件注册

    $("div").事件名(fn(){})

    事件处理 on

    绑定多个事件

    //绑定多个事件,每个事件对应不同函数
    $("div").on({
    
    mouserenter:fn(){},
    
    cilck:fn(){},
    
    dbclick:fn(){},
    
    })
    
    //绑定多个事件,事件之间用空格隔开,对应相同函数
    $("div").on("mouseenter mouseleave", function() {});
    
    事件委派

    $("绑定事件的元素").on("click", "触发的元素", fn() {});

    $("ul").on("click", "li", function() {
        alert(11);
    });
    //click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
    
    on可以给未来动态创建的元素绑定事件
    $("ul").append("<li> </li>");
    //新加的小li也绑定了事件
    

    事件解绑 off

    $("div").off();解除所有事件

    $("div").off("click"); 解除某个事件

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

    绑定只触发一次的事件

    $("p").one("click", function() {})

    自动触发事件

    默认行为 例:文本框focus会有光标闪烁

    元素.事件()

    $("div").click();会触发元素的默认行为

    元素.trigger(“事件”)

    $("div").trigger("click");会触发元素的默认行为

    元素.triggerHandler(“事件”)

    $("div").triggerHandler("click");不会触发元素的默认行为

    jQuery 事件对象

    和原生差不多

    $("div").on("click", function(event) {
        // console.log(event);
        console.log("点击了div");
        event.stopPropagation(); //阻止冒泡
    })
    

    jQuery 拷贝对象

    $.extend([deep], target, object1, [objectN])

    参数

    deep:如果设为true,则为深拷贝

    target:待修改对象。

    object1:待合并到第一个对象的对象。

    objectN:待合并到第一个对象的对象(可选)。

    var targetObj = {
        id: 0,
        msg: {
            sex: "男"
        }
    };
    var obj = {
        id: 1,
        name: "andy",
        msg: {
            age: 18
        }
    };
    
    浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象
    • targetObj将会被obj中的同名属性覆盖
    • 但是,obj中的msg属性值是对象,浅拷贝只会拷贝msg的地址,所以targetObj打印出来的msg和obj指向同一地址
    $.extend(targetObj,obj);
    targetObj.msg.age = 20; //两个对象中的msg指向同一地址,所以都会被修改
    
    深拷贝把里面的数据完全复制一份给目标对象

    (如果里面有不冲突的属性,会合并到一起)

    • 因为是深拷贝,obj把属性复制一份给targetObj,所以如果targetObj中有和obj同名的属性,则会被覆盖
    • objmsg中的age则会合并到targetObjmsg里面
    • 如果如targetObj中的msg原来有age,则会被覆盖
    $.extend(true, targetObj, obj);
    targetObj.msg.age = 20;
    

    jQuery 多库共存

    • 如果$符号冲突 我们就使用jQuery
    • jquery释放对$控制权 自己来决定
    var diy = jQuery.noConflict();
    console.log(diy("span"));
    diy.each();
    

    jQuery 插件

    jQuery之家 / jQuery插件库

    瀑布流、图片懒加载、全屏滚动···

    jQuery API 中文文档