jQuery入门

jQuery选择器

隐式迭代

遍历内部Dom元素(为数组形式存储)的过程叫做隐式迭代

$("div").css("属性值","样式");

筛选选择器

语法用法描述
:first$(“li:first”)获取第一个li元素
:last$(“li:last”)获取最后一个li元素
:eq(index)$(“li:eq(2)”)获取到的li元素中,选择索引号为2的元素
:odd$(“li:odd”)获取到的li元素中,选择索引号为奇数的元素
:even$(“li:even”)获取到的li元素中,选择索引号为奇数的元素

筛选方法

语法用法描述
parent()$(“li”).parent();返回最近一级的父级元素
children(selector)$(“ul”).children(“li”)相当于$(“ul>li”),最近一级(亲儿子)
find(selector)$(“ul”).find(“li”)后代选择器
siblings(selector)$(“ul”).siblings(“li”)查找兄弟节点,不包括自己本身
nextAll([expr])$(".first").nextAll()查找当前元素之后的所有同辈元素
prevAll([expr])$(".last").prevAll()查找当前元素之前的所有同辈元素
hasClass(class)$(“div”).hasClass(“protected”)检查当前元素是否含有某个特定的类,如果有,则返回true
eq(index)$(“li”).eq(2)相当于$(“li:eq(2)”),index从0开始

实例:新浪下拉菜单

<script>
    $(function(){
        //鼠标经过
        $(".nav>li").mouseover(function(){
            //$(this) jQuery的当前元素
            // show() 显示元素
            $(this).children("ul").show();
        });

        //鼠标离开
        $(".nav>li").mouseout(function()){
            $(this).children("ul").hide();
        }
    })
</script>

jQuery的筛选思想

想要多选一的效果

<script>
    $(function(){
        //1.隐式迭代 给所有的按钮都绑定了点击事件
        $("button").click(function(){
            //2.当前的元素变化背景颜色
            $(this).css("background","pink");
            //3.其余的兄弟去掉背景颜色
            $(this).siblings("button").css("background","");
        });
    })
</script>

链式编程

链式编程节省了代码量,但要注意是给哪个对象执行操作

$(this).css("background","pink").siblings("button").css("background","");

jQuery样式操作

css

$("div").css({
    width:400,
    height:400,
    backgroundColor:"red"
})
  • 添加类
$("div").addClass("current");
  • 删除类
$("div").click(function(){
    $(this).removeClass("current");
})
  • 切换类
$("div").click(function(){
    $(this).toggleClass("current");
})

案例:tab栏切换内容

<script>
    $(function(){
        //1. 点击上部的li,当前li 添加current类,其余兄弟移除类
        $(".tab_list li").click(function(){
            $(this).addClass("current").siblings().removeClass("current");
            //2. 点击的同时,得到当前li的索引号
            var index=$(this).index;
            //3. 让下部里面相应索引号的item显示,其余的item隐藏
            $(".tab_con .item").eq(index).show.siblings().hide();
        })
    })
</script>

jQuery效果

显示隐藏切换

1.显示语法规范

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

2.显示参数
①参数都可以省略,无动画直接显示
②speed:三种预定速度之一的字符串(slow,normal,fast)或表示动画时长的毫秒数值(如:1000)。
③easing:(Optional)用来指定切换效果,默认是"swing",可用参数"linear"
④fn:回调函数,在动画完成时执行的函数,每个元素执行一次。

3.实例

$("div").hide(1000,function()){
    alert(1);
}

滑动效果事件切换

查阅文档上拉和下拉分别是slideDown(),slideUp()方法

hover()
$(".nav>li").hover(function(){
    $(this).children("ul").slideDown(200);
},function(){
    $(this).children("ul").slideUp(200);
});

//优化后为
$(".nav>li").hover(function()){
    $(this).children("ul").slideToggle();
}

动画停止stop

很好的解决了动画排队,相当于停止结束上一次的动画

$(".nav>li").hover(function()){
    //stop 方法必须写在动画前面
    $(this).children("ul").stop().slideToggle();
}

淡入淡出效果

<script>
    $(function(){
        $("button").eq(0).click(function(){
            //淡入 fadeIn()
            $("div").fadeIn(1000);
        })
        $("button").eq(1).click(function(){
            //淡出 fadeOut()
            $("div").fadeOut(1000);
        })
        $("button").eq(2).click(function(){
            //淡入淡出切换 fadeToggle()
            $("div").fadeToggle(1000);
        })
        $("button").eq(3).click(function(){
            //透明度,取值在0~1之间, 属性值分别为速度和透明度
            $("div").fadeTo(1000,0.5);
        })
    })
</script>

自定义动画

1.语法

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

2.实例

<script>
    $(function(){
        $("button").click(function(){
            $("div").animate({
                left:500
                opacity:0.4
            },500);
        });
    });
</script>

手风琴效果制作

<script>
    $(function(){
        $(".king li").mouseover(function(){
            //1. 当前小li宽度变为224px,同时里面的小图片淡出,大图片淡入
            $(this).stop().animate({
                width:224
            }).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();
            //2. 其余兄弟小li宽度变为69px,小图片淡入,大图片淡出
            $(this).stop().animate({
                width:69
            }).find(".big").stop().fadeout().sibling(".small")..stop()fadeIn();
        })
    })
</script>

jQuery属性操作

固有属性值prop()

所有元素固有属性就是元素本身自带的属性,比如 < a > 元素里面的href,< input >元素里面的type

element.prop("属性名)

设置属性语法

prop("属性","属性名")

自定义属性attr()

element.attr("属性")
element.attr("属性","属性名")

数据缓存

把数据当作一个变量来看

$("span").data("uname","andy");
console.log($("span").data("uname"));

如上输出uname的值为andy

购物车全选按钮实例

$(".checkall").change(function(){
    //1. 把全选(checkall)的状态赋值给小按钮(j-checkbox),同时全选按钮有两个,要保持同步
    $(".j-checkbox,.checkall").prop("checked",$(this).proc("check"));

    //小按钮(j-checkbox)<所有小按钮个数时,全选取消
    $(".j-checkbox").change(function(){
        if($("j-checkbox:checked").length == $("j-checkbox").length){
            $(".checkall").prop("checked",true);
        }
        else{
            $(".checkall").prop("checked",false);
        }
    })
})

jQuery内容文本值

只要是针对元素的内容还有表单的值操作

1.普通元素内容 html(),text(),val()

$("div").html() //获取元素内容
$("div").html("内容") //设置元素内容

$("div").text(); //获取元素文本内容
$("div").text("123") //设置元素文本内容

$("div").val(); //获取表单值
$("div").val("123") //设置表单值

实例:增减商品同时实现总价格变化

保留n位小数的方法:element.toFixed(n)

<script>
    $(function(){
        $(".increment").click(function(){
            var n=$(this).sibling(".itxt").val();
            n++;
            $(this).sibling(".itxt").val(n);

            //p为商品单价
            // var p=$(this).parent().parent().siblings(".p-price").html();
            //改进后为
            var p=$(this).parents(".p-num").siblings(".p-price").html();

            //p为去掉¥后的单价
            p=p.substr(1);
            //商品小计
            $(this).parents(".p-num").siblings(".p-price").html("¥"+(p*n).toFixed(2));
        })
        $(".decrement").click(function(){
            var n=$(this).sibling(".itxt").val();
            if(n==1){
                return false;
            }
            n--;
            $(this).sibling(".itxt").val(n);

            //p为商品单价
            var p=$(this).parent().parent().siblings(".p-price").html();
            //p为去掉¥后的单价
            p=p.substr(1);
            //商品小计
            $(this).parent().parent().siblings(".p-price").html("¥"+(p*n).toFixed(2));
        })

        //当用户直接修改表单里的值时,总价也要发生变化
        $(".itxt").change(function(){
            var n=$(this).val();
            var p=$(this).parents(".p-num").siblings(".p-price").html();
            p=p.substr(1);
            $(this).parents(".p-num").siblings(".p-price").html("¥"+(p*n).toFixed(2));
        })
    })
</script>

遍历元素

如果要对同一元素做不同操作,就要用到遍历操作

//第一个参数为索引号,可以自己指定索引号名称
//第二个参数时dom元素对象,
$("div").each(function(index,domEle){
    xxx;
})

实例:完成总数量和总价格的计算

<script>
    $(function(){
        var sum=0;
        var arr=["red","green","blue"];
        //each会遍历每一个元素
        $("div").each(function(i,domEle)){
            $(domEle).css("color",arr[i]);
            sum+=parseInt($(domEle).text());
        }
        //$.each()用于遍历元素,便于处理数据,数组
        $.each($("div"),function(i,ele){
            
        })
    })
</script>

创建添加删除元素

//创建元素
var li=$("<li>我是后来创建的li</li>");

//内部添加元素
element.append("内容")
$("ul").append(li);    //放到内容的最后面
$("ul").prepend(li); //放到内容的最前面
//

//外部添加
var div=$("<div>后面添加的<div>");
$(".test").after(div);
$(".test").before(div);

//删除元素
$("ul").remove();//删除匹配的孩子 自杀
$("ul").empty(); //删除自己的孩子 清空
$("ul").html(""); //与empty()等价,为清空

实例:删除商品模块

1.商品后面的删除按钮
2.删除选中的商品
3.清理购物车

<script>
    $(function(){
        //1.商品后面的删除按钮
        $(".p-action a").click(function(){
            $(this).parents(".cart-item").remove();
            getSum(); //getSum为更新总价和总量
        })
        //2.删除选中的商品
        $(".remove-batch").click(function(){
            $(".j-checkbox:checked").parents(".cart-item").remove();
            getSum(); //getSum为更新总价和总量
        })
        3.清理购物车
        $(".clear-all").click(function(){
            $(".cart-item").remove();
            getSum(); //getSum为更新总价和总量
        })

    })
</script>

jQuery尺寸,位置操作

jQuery尺寸

语法用法
width(),height()获取匹配元素宽度和高度值,只含width,height
innerWidth(),innerHeight()获取匹配元素宽度和高度值,包含padding
outerWidth(),outerHeight()获取匹配元素宽度和高度值,包含padding,border
outerWidth(true),outerHeight(true)获取匹配元素宽度和高度值,包含padding,border,margin

jQuery位置

位置主要有三个:offset(),position(),scrollTop()/scrollLeft()

// offset()方法设置或返回被选元素相对于文档的偏移坐标,和父级没有关系
console.log($(".son").offset());
console.log($(".son").offset().top);  //获取具体的距离文档顶部的距离
//设置偏移距离
$(".son").offset({
    top:200,
    left:200
})
//position()方法用于返回被选元素相对于父级元素的偏移坐标,只能获取,不能设置
console.log($(".son").position());
//scrollTop()/scrollLeft()方法设置或返回被选元素被卷去的头部或左侧
//页面滚动事件
$(document).scrollTop(100);
var boxTop=$(".container").offset().top;
$(window).scroll(function(){
    console.log($(document).scrollTop());
    if($(document).scrollTop()>=boxTop){
        $(".back").fadeIn();
    }
    else{
        $(".back").fadeOut();
    }
})

//返回顶部
$(".back").click(function(){
    // $(document).scrollTop(0); 一定要是html和body元素做动画而不是文档
    $("body, html).stop().animate({
        scrollTop:0
    })
})

实例:电梯导航

$(function(){
    //当我们点击了li,此时不需要执行 页面滚动事件里的li的背景选择,
    //节流阀
    var flag=true;

    //1. 当我们滚动到***模块时,就让电梯导航显示出来  
    var toolTop=$(".recommed").offset().top;
    function toggleTool(){
        if($(document).scrollTop()>=?){
            $(".fixedtool").fadeIn();
        }
        else $(".fixedtool").fadeOut();
    }
    $(window).scroll(function(){
        toggleTool();
        //3. 页面滚动到模块时,相应的li模块也添加current类,兄弟姐妹移除
        if(flag){
            $(".floor .w").each(function(i,ele){
                //当被卷去的位置大于模块的offset值,说明到达了这个模块。
                if($(document).scrollTop()>=$(ele).offset().top){
                    $(".fiexedtool li").eq(i).addClass("current").siblings().removeClass();
                }
            })
        }
        
    })

    //2. 点击电梯导航页面(fixedtool)可以滚动到相应内容区域
    $(".fixedtool li").click(function(){
        flag=false;
        //当我们每次点击li,就需要计算出页面要去往的位置
        var current=$(".floor .w").eq($(this).index()).offset().top;
        //页面滚动效果
        $("body,html").stop().animate({
            scrollTop:current
        },function(){
            flag=true;
        });
        //点击之后,让当前的li,添加current类名,兄弟姐妹移除current类名
        $(this).addClass("current").siblings().removeClass();
    })
})

jQuery事件

事件注册

1.语法

element.事件(function(){})

事件绑定on()

on()方法在匹配元素上绑定一个或多个事件的事件处理函数
可以事件委派操作,把原来加在子元素身上的事件绑定在父元素身上
动态创建的元素,

语法

element.on(events,[selector],fn)

events:一个或多个用空格分隔的事件类型,如"click"或"keydown"
selector:元素的子元素选择器
fn:回调函数

$("div").on({
    mouseenter:function(){
        $(this).css("background","skyblue");
    }
    click:function(){
        $(this).css("background","purple");
    }
    mouseleave:function(){
        $(this).css("background","pink");
    }
})
//或者可以用以下方式:
$("div").on("mouseenter,mouseleave",function(){
    $(this).toggleClass("current");
})

//on可以实现事件委派,click是绑定在ul身上,但是触发的对象是ul里面的li
$("ul").on("click","li",function(){
    alert(11);
})

//on可以给动态给未来创建元素绑定事件
$("ol").on("click","li",function(){
    alert(11);
})

实例:微博发布

html:

<body>
    <div class="box" id="weibo">
        <span>微博发布</span>
        <textarea name="" class="txt" cols="30" rows="10"></textarea>
        <button class="btn">发布</button>
        <ul>
        </ul>
    </div>
</body>

实现:

<script>
    $(function(){
        //1.点击发布按钮,动态创建一个小li,放入文本框的内容和删除按钮,并且添加到ul中
        $(".btn").on("click",function(){
            var li=$("<li></li>");
            li.html($(".txt").val()+"<a href='javascript:;'>删除</a>");
            $(ul).prepend(li);
            li.slideDown();
            $(".txt").val("");
        })
        //2.点击删除按钮,可以删除当前的微博留言
        $("ul").on("click","a",function(){
            $(this).parent().slideUp(function(){
                $(this).remove();
            })
        })
    })
</script>

事件解绑off()

$("div").off(); //解除了div身上的所有事件
$("div").off("click");//解除了div身上的click事件
$("div").off("click","li");//解绑事件委托

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

自动触发事件

$(function(){
    $("div").on("click",function(){
        alert(11);
    });
    //自动触发事件 元素.事件
    $("div").click();

    // 元素.trigger("事件");
    $("div").trigger("click");

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

其他方法

jQuery对象拷贝

如果想把某个对象拷贝给另一个对象使用,此时可以使用$.extend()方法

语法:

$.extend([deep],target,object1,[objectN])
//deep:如果设置为true,则为深拷贝,默认为false,为浅拷贝
//target:要拷贝的目标对象
//object1:待拷贝的对一个对象的对象

$(function(){
    var targetObj={};
    var obj={
        id=1,
        name:"andy"
    }
    $.extend(targetObj,obj);
    //会覆盖原来的数据
})

浅拷贝:是把被拷贝对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象
深拷贝:完全克隆,修改目标对象不会影响被拷贝对象

jQuery多库共存

①如果$符号冲突,我们就使用jQuery

②让jQuery释放对 控 制 权 , 让 用 户 自 己 决 定 − > v a r x x = 控制权,让用户自己决定-> var xx= >varxx=.noConflict();

jQuery插件

1.jQuery之家 http://www.htmleaf.com/
2.jQuery插件库 http://www.jq22.com/

插件使用步骤:
①引入相关文件.
②复制相关html,css,js

图片懒加载:当我们页面滑动到可视区域,再显示图片

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值