jQuery学习

jQuery简介

jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是为了更加便捷的开发,并且在兼容性方面十分优秀。

jQuery语法

详细参考:http://www.w3school.com.cn/jquery/

jQuery语法也是查找到要操作的标签对象(jQuery对象)并对其执行想要的操作(使用封装的方法)。

基础语法: $(selector).action()

示例:

$(this).hide()---隐藏当前元素   (效果等同于display:none;)

$(this).show()---显示当前元素(和hide相对)

$("p").hide()---隐藏所有的<p>元素

$("p.test").hide()---隐藏所有class="test"的<p>元素

$("#test").hide()---隐藏所有的id="test"的元素

选择器

  1. 基本选择器

     $("*")            //选取全部元素
    
     $("element")      //通过标签名称查找($("p")查找所有p标签)  
    
     $("#id")          //通过id属性查找元素
    
     $(".class")       //通过class属性查找元素
    
     $(".class,p,div") //多钟不同类型元素(组合)查找
    
  2. 层级选择器

     $(".outer div")   // 后代选择器查找
    
     $(".outer>div")   // 子代选择器查找
      
     $(".outer+div")   // 通过毗邻查找,匹配紧邻的兄弟元素
      
     $(".outer~div")   // 向下找所有兄弟元素
    
  3. 属性选择器

     $("[id="div1"]")    //有id属性且值为"div1"的元素
    
     $("[sex]")          //有sex属性的元素
    
     $("[sex="male"]")   //有sex属性且值为"male"的元素
    

筛选器

  1. 基本筛选器

     $('li:first')    //第一个元素
    
     $('li:last')     //最后一个元素
      
     $("tr:even")     //索引为偶数的元素,从 0 开始
    
     $("tr:odd")      //索引为奇数的元素,从 1 开始
       
     $("tr:eq(1)")    //给定索引值的元素
    
     $("tr:gt(0)")    //大于给定索引值的元素
    
     $("tr:lt(2)")    //小于给定索引值的元素
      
     $(":focus")      //当前获取焦点的元素
    
     $(":animated")   //正在执行动画效果的元素
    
  2. 表单筛选器

     $(":input")      // 匹配所有 input, textarea, select 和 button 元素
    
     $(":text")       // 所有的单行文本框
    
     $(":password")   // 所有密码框
    
     $(":radio")      // 所有单选按钮
    
     $(":checkbox")   // 所有复选框
    
     $(":submit")     // 所有提交按钮
    
     $(":reset")      // 所有重置按钮
    
     $(":button")     // 所有button按钮
    
     $(":file")       // 所有文件域
    
     $("input:checked")             // 所有选中的元素
    
     $("select option:selected")    // select中所有选中的option元素
    
  3. 内容筛选器

     $("div:contains('test')")    // 包含test文本的元素
    
     $("td:empty")                // 不包含子元素或者文本的空元素
    
     $("div:has(p)")              // 含有选择器所匹配的元素
    
     $("td:parent")               // 含有子元素或者文本的元素
    
  4. 查找筛选器

     $("div").children()              // 查找div下的所有儿子标签
     $("div").children().first()      //查找第一个儿子元素
     $("div").children("#test")       //查找id等于"test"的儿子元素
     $("div").find()                  // 查找div下的所有后代标签
      
     $("p").next()                    // 紧邻p元素后的下一个兄弟元素
     $("p").nextAll()                 // p元素之后所有的兄弟元素
     $("#test").nextUntil("#test2")   // id为"test"元素之后到id为'test2'之间所有的兄弟元素(开区间)
      
     $("p").prev()                    // 紧邻p元素的上一个兄弟元素
     $("p").prevAll()                 // p元素之前所有的兄弟元素
     $("#test").prevUntil("#test2")   // id为"test"元素之前到id为'test2'之间所有的兄弟元素(开区间)
      
      
     $("p").parent()                  // 每个p元素的父元素
     $("p").parents()                 // 每个p元素的所有祖先元素,body,html
     $("#test").parentsUntil("#test2")// id为"test"元素到id为'test2'之间所有的父级元素(开区间)
      
     $("div").siblings()              // 所有的兄弟元素,不包括自己
      
     $("p").hasClass("test")          // 查找p标签有class名字为test
    

each循环

方式一:

#格式:$.each(obj,function)

arry=[11,22,33,44];
dic={"sex":"male","age":30};
$.each(arry,function(index,v){
    console.log(index,v)
});
$.each(dic,function (index,v) {
    console.log(index,v)
});

//执行结果:0 11 1 22 2 33 3 44
		   sex male  age 30

#停止当次循环函数和停止当次之后的所有函数
arry=[11,22,33,44];
$.each(arry,function(index,v){
    if (index===2) {
        return false;      //停止信号类似break信号
    }
    console.log(index,v)
});      //结果为 0 11 1 22


arry=[11,22,33,44];
$.each(arry,function(index,v){
    if (index===2) {
        return;      //停止信号类似break信号
    }
    console.log(index,v)
});      //结果为 0 11 1 22 3 44

方式二:

#格式:$("p").each(function)

<p>111</p>
<p>222</p>
<p>333</p>

<script>
    $("p").each(function () {
        console.log($(this).index(),$(this).text());
    })
</script>
// 执行结果: 0 "111"
			1 "222"		
			2 "333"

属性操作

  1. 基本熟悉操作

     attr操作:
          取值操作:$("").attr(“属性名”);
          赋值操作:$("").attr(“属性名”,“属性值”);
     	 删除属性:$("").removeAttr("属性名");
    
     例如:
     	$("a").attr("href");       //返回所有a标签的href属性值
     	$("a").attr("href","http://wwww.baidu.com");      //设置(更改)所有a标签的href属性值
     	$("a").removeAttr("href")   //将所有a标签的href属性删除
     
     ############################
    
     prop操作:
     	取值操作:$("").prop(“属性名”);
         赋值操作:$("").prop(“属性名”,“属性值”);
     	删除属性:$("").removeProp("属性名");
     
     $("input[type='checkbox']").prop("checked", true);   // 选中复选框
     $("input[type='checkbox']").prop("checked", false);  // 取消复选框
     $("a").removeProp("href");       // 将所有a标签的href属性删除
    

总结attr和prop

attr可以找到自定义的属性、prop只能找到固有的属性。checked和selected属性最好使用prop,其它使用attr方法。

  1. class操作

     $("p").addClass("test");      // 为p元素class属性增加一个"test"值
     $("p").removeClass("test");    // 从p元素中class属性删除一个"test"值
     $("p").toggleClass("test");    // 如果存在就删除,否则就添加
     $("p").hasClass("test");       // 判断有没有 'test' 类,返回布尔值
    
  2. 文本操作

     $('p').html();               // 返回p元素的html内容
     $("p").html("Hello <b>test</b>!");   // 设置p元素的html内容
     $('p').text();               // 返回p元素的文本内容
     $("p").text("test");            // 设置p元素的文本内容
     $("input").val();              // 获取文本框中的值(value的值)
     $("input").val("test");            // 设置文本框中的内容
    

CSS操作

1. 返回CSS属性

$("p").css("background-color");   //返回匹配到的p标签的css背景色属性值

2. 设置CSS属性

$("p").css("background-color","yellow");

3. 设置多个CSS属性

$("p").css({"background-color":"yellow","font-size":"200%"});

CSS位置操作

$("div").offset()
$("div").offset().left       //获取匹配到的元素当前的左偏移量(相对于文档的偏移)
$("div").offset().top        //获取匹配到的元素当前的上偏移量(相对于文档的偏移)
$("div").offset({top:200,left:0})     //更改偏移量大小

$("div").postion()           //返回匹配元素相对于第一个已定位的父元素的偏移量(此方法只对可见元素有效)

$(window).scrollTop()        //返回滚动条相对滚动条顶部的偏移

$(window).scrollLeft()        //返回滚动条相对滚动条左侧的偏移

鼠标拖动图标示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }
        .box{
             200px;
            height: 200px;
            background-color: orange;
        }
        body{
            height: 900px;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <script src="jquery-3.2.1.js"></script>
    <script>
        var x1;
        var y1;
        var $mar_left;
        var $mar_top;
        $(".box").mouseover(function () {
            $(this).css("cursor","move");
        });
        $(".box").mousedown(function (k) {
//            $(this).css("cursor","move");
            x1=k.clientX;
            y1=k.clientY;
            $mar_left=$(this).offset().left;
            $mar_top=$(this).offset().top;
            $(document).mousemove(function (e) {
                var x2=e.clientX;
                var y2=e.clientY;
//                $(".box").offset({left:$mar_left+x2-x1,top:$mar_top+y2-y1});
                var $x=$mar_left+x2-x1;
                var $y=$mar_top+y2-y1;
                if ($x < 0) {
                    $x=0;
                }
                if ($y < 0) {
                    $y=0;
                }
                if ($x>1545.45) {
                    $x=1545.45;
                }
                if ($y>700) {
                    $y=700;
                }
//                $(".box").css({"marginLeft":$mar_left+x2-x1,"marginTop":$mar_top+y2-y1});
                $(".box").css({"marginLeft":$x,"marginTop":$y});
                console.log($mar_left+x2-x1);
                console.log($mar_top+y2-y1);
            });
        });
        $(document).mouseup(function () {
            $(document).off("mousemove");
        })
    </script>
</body>
</html>

滚动条示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box{
             100%;
            height: 2000px;
            background-color: darkgray;
        }
        #return_top{
             80px;
            height: 60px;
            text-align: center;
            line-height: 60px;
            background-color: blue;
            color: white;
            position: fixed;
            bottom: 20px;
            right: 20px;
            display: none;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <div id="return_top">TOP</div>
    <script src="jquery-3.2.1.js"></script>
    <script>
        $(window).scroll(function () {
            if ($(window).scrollTop()>200) {
                $("#return_top").show();
            }
            else {
                $("#return_top").hide();
            }
        });
        $("#return_top").click(function () {
            $(window).scrollTop(0);
        })
    </script>
</body>
</html>

CSS尺寸操作

 $("div").height();        // 返回div内容区域的高度
 $("div").width();         // 返回div内容区域的宽度

 $("div").innerHeight();   // 返回div的内容区+pading区域后的高度
 $("div").innerWidth();    // 返回div的内容区+pading区域后的宽度

 $("div").outerHeight();   // 返回div的内容区+pading区域+border区域后的高度
 $("div").outerWidth();    // 返回div的内容区+pading区域+border区域后的宽度

 $("div").outerHeight(true);   // 返回div的内容区+pading区域+border区域+margin区域后的高度
 $("div").outerWidth(true);    // 返回div的内容区+pading区域+border区域+margin区域后的宽度

节点操作

  1. 内部插入

     #节点元素之间父子关系
     $("div").append("<b>Hello World!</b>");    // 每个div元素内后面追加内容
    
     $("b").appendTo("div");         // 将b元素追加到div内后
    
     $("div").prepend("<b>Hello World!</b>");  // 每个p元素内前面追加内容
    
     $("b").prependTo("div");          // 将b元素追加到div内前
    
  2. 外部插入

     #节点元素之间兄弟关系
     $("div").after("<p>after you</p>")      //每个div元素同级之后插入内容
    
     $("div").before("<p>before you</p>")    //每个div元素同级之前插入内容
    
     $("p").insertAfter("input")             //将所有p元素插入到input元素的后面
    
     $("p").insertBefore("input")             //将所有p元素插入到input元素的前面
    
  3. 替换

     $("p").replaceWith("<b>Paragraph</b>");     // 将所有匹配到的p元素替换成指定的新元素
    
     $(document.createElement("div")).replaceAll("p");;     // 用新建的div元素替换所有的p元素
    
  4. 删除

     $("p").remove()     //删除被选元素(及其子元素)
     
     $("p").empty()      //删除被选元素内所有内容(文本内容和子元素)------也就是清空所有内容(保留空标签)  
    
  5. 复制

     $("p").clone()      //生成匹配到的p元素的副本,包含子节点、文本和属性,还包括事件处理器。
    

动画效果

  1. 显示隐藏

     $("p").show()        // 将匹配到的元素显示
    
     $("p").show(1000);      // 参数表示速度,("slow","normal","fast"),也可设置为毫秒
    
     $("p").hide()        // 将匹配到的元素隐藏
    
     $("p").toggle();      // 切换,匹配到的元素是隐藏的就显示,是显示的就隐藏
    
  2. 滑动

     $("p").slideDown("1000");    // 用1000毫秒时间将段落滑动隐藏(以滑动方式隐藏)
    
     $("p").slideUp("1000");     // 用1000毫秒时间将段落滑动显示(以滑动方式显示)
    
     $("p").slideToggle("1000");  // 切换,匹配到的元素是滑动隐藏的就滑动显示,是滑动显示的就滑动隐藏(滑动方式)
    
  3. 淡入淡出

     $("p").fadeIn("900");        // 淡入已隐藏的元素
    
     $("p").fadeOut("900");       // 淡出显现的元素
    
     $("p").fadeToggle("900");     // 如果元素已淡出,则 fadeToggle() 会向元素添加淡入效果。如果元素已淡入,则 fadeToggle() 会向元素添加淡出效果。
    
     $("p").fadeTo("slow", 0.6);    // 用900毫秒时间将段落的透明度调整到0.6(渐变为给定的不透明度)
    
  4. 回调函数

     由于 JavaScript 语句(指令)是逐一执行的 - 按照次序,动画之后的语句可能会产生错误或页面冲突,因为动画还没有完成。
     为了避免这个情况,可以以参数的形式添加 Callback 函数。
    
     错误:
     $("p").hide(1000);
     alert("The paragraph is now hidden");
    
    
    
     当动画 100% 完成后,即调用 Callback 函数。
    
     语法: $("p").hide(speed,callback)
    
     $("p").hide(1000,function(){
     alert("The paragraph is now hidden");
     });
    

事件

一些事件

$(document).ready(function)      // 页面加载成功之后才执行函数内的事件。--------等价于$(function)

$(window).unload(function)              // 用户离开页面时触发函数执行

$(window).scroll(function)              // 当用户拖动滚动条时触发事件

$(window).resize(function)              // 当浏览器窗口的大小改变时触发事件

$("img").error(function)                //当img元素遇到错误(没有正确载入)时,触发error事件
#例如:
$("img").error(function(){
  $("img").replaceWith("
Missing image!
");
});

#鼠标相关事件

$("p").click(function)                 // 鼠标单击时触发

$("p").dbclick(function)               // 鼠标双击时触发

$("input").focus(function)                     // 元素获得焦点时,触发 focus 事件

$(":text").blur(function)                      // 元素失去焦点时,触发 blur事件

$("div").hover(function,function)      // 鼠标移到元素区域触发第一个函数执行,鼠标移出元素区域触发第二个函数执行。

$("div").mousedown(function)           //在元素区内鼠标按下时触发

$("div").mouseup(function)           // 元素上放松鼠标按钮时触发事件

$("div").mouseover(function)              // 当鼠标指针位于元素上方时触发事件

$("div").mouseout(function)              // 当鼠标指针从元素上移开时触发事件

$("div").mouseleave(function)            // 当鼠标指针从元素上移开时触发事件,(mouseleave和mouseout不同之处是,mouseleave是当鼠标离开被选元素时才会触发,而mouseout是不论鼠标离开被选元素还是任何它的子元素都会触发mouseout事件)

$("div").mousemove(function)              // 当鼠标指针在指定的元素中移动时触发事件

#键盘相关事件
$("input").keydown(function)              //当用户按下一个按键后触发事件

$("input").keypress(function)             //当用户按下一个键并释放(弹起)按键后触发事件

$("input").keyup(function)                //当用户释放按键时触发事件

#表单事件
$(":text").focus(function)                     // 元素获得焦点时,触发 focus 事件

$(":text").blur(function)                      // 元素失去焦点时,触发 blur事件

$("select").change(function)                   //元素的value值发生改变时触发change事件(例如:当用户select另一个时)

$(":text").select(function)                //当用户选中input元素中的文本时触发

$(":submit").submit(function)                  //当用户提交表单时触发

on方法绑定事件和事件委派

$("p").on("click",function)          //  给p元素绑定一个click事件。------------等价于$("p").click(fucntion)

$("ul").on("click","li",function)    // 给ul元素下面的li元素委派一个click事件,事件触发时执行function内逻辑(常用于一个固定的父代元素标签来委派下面的后代元素标签)  

$("ul").off("click")      //移除通过on()方法绑定的事件,第一个参数event事件是必须要传入的,多个事件用空格隔开

event对象的使用

// 所有的事件函数都可以传入event参数方便处理事件(任何参数名都可以,比如function(e),参数名字是没有影响的)

$("p").click(function(event){ 
 alert(event.type); 				//"click" 
});

#event对象的属性方法
event.pageX           // 事件发生时,鼠标距离网页左上角的水平距离(left)

event.pageY           // 事件发生时,鼠标距离网页左上角的垂直距离(top)

event.clientX           // 事件发生时,鼠标距离网页左上角的水平距离(left)

event.clientY           // 事件发生时,鼠标距离网页左上角的垂直距离(top)

event.keyCode            //类型: Number, 说明: 最后响应键盘按键的 keyCode 值 (ASCII码值)
原文地址:https://www.cnblogs.com/liao-lin/p/7376141.html