dom 对象与jQuery对象

  1. DOM 对象: 用原生js获取过来的对象就是DOM对象
    var myDiv = document.querySelector(‘div’); // myDiv 是DOM对象
    var mySpan = document.querySelector(‘span’); // mySpan 是DOM对象
    console.dir(myDiv);
  2. jQuery对象: 用jquery方式获取过来的对象是jQuery对象。 本质:通过$把DOM元素进行了包装
    $(‘div’); // $(‘div’)是一个jQuery 对象
    $(‘span’); // $(‘span’)是一个jQuery 对象

dom对象转变成jQuery对象

//1.dom对象获取
	 var myvideo = document.querySelector('video');
    // 2.  jQuery对象转换为DOM对象
    $('video')

筛选

$("ul li:first").css("color", "red");
     $("ul li:eq(2)").css("color", "blue");
     $("ol li:odd").css("color", "skyblue");
     $("ol li:even").css("color", "pink");
  1. // 注意一下都是方法 带括号
$(function() {
  // 1. 父  parent()  返回的是 最近一级的父级元素 亲爸爸
  console.log($(".son").parent());
  // 2. 子
  // (1) 亲儿子 children()  类似子代选择器  ul>li
  // $(".nav").children("p").css("color", "red");
  // (2) 可以选里面所有的孩子 包括儿子和孙子  find() 类似于后代选择器
  $(".nav").find("p").css("color", "red");
  1. 兄弟元素siblings 除了自身元素之外的所有亲兄弟
$("ol .item").siblings("li").css("color", "red");
   //  第n个元素
   var index = 2;
   // (1) 我们可以利用选择器的方式选择
   // $("ul li:eq(2)").css("color", "blue");
   // $("ul li:eq("+index+")").css("color", "blue");
   // (2) 我们可以利用选择方法的方式选择 更推荐这种写法
   // $("ul li").eq(2).css("color", "blue");
   // $("ul li").eq(index).css("color", "blue");
   // 判断是否有某个类名
   console.log($("div:first").hasClass("current"));
   console.log($("div:last").hasClass("current"));

});

  1. 操作样式之css方法 单个属性修改使用键值对 多个属性修改使用对象方法
$(function() {
  console.log($("div").css("width"));
  // $("div").css("width", "300px");
  // $("div").css("width", 300);
  // $("div").css(height, "300px"); 属性名一定要加引号
  $("div").css({
      width: 400,
      height: 400,
      backgroundColor: "red"
          // 如果是复合属性则必须采取驼峰命名法,如果值不是数字,则需要加引号
  })

})

  1. 类方法
$(function() {
  // 1. 添加类 addClass()
  // $("div").click(function() {
  //     // $(this).addClass("current");
  // });
  // 2. 删除类 removeClass()
  // $("div").click(function() {
  //     $(this).removeClass("current");
  // });
  // 3. 切换类 toggleClass()
  $("div").click(function() {
      $(this).toggleClass("current");
  });

})
6.效果显示与隐藏

$(function() {
  $("button").eq(0).click(function() {
      $("div").show(1000, function() {
          alert(1);
      });
  })
  $("button").eq(1).click(function() {
      $("div").hide(1000, function() {
          alert(1);
      });
  })
  $("button").eq(2).click(function() {
          $("div").toggle(1000);
      })
      // 一般情况下,我们都不加参数直接显示隐藏就可以了

});

7.滑动

$(function() {
        $("button").eq(0).click(function() {
            // 下滑动 slideDown()
            $("div").slideDown();
        })
        $("button").eq(1).click(function() {
            // 上滑动 slideUp()
            $("div").slideUp(500);
        })
        $("button").eq(2).click(function() {
            // 滑动切换 slideToggle()
            $("div").slideToggle(500);
        });
  1. 事件切换 hover 就是鼠标经过和离开的复合写法
$(".nav>li").hover(function() {
       $(this).children("ul").slideDown(200);
   }, function() {
      $(this).children("ul").slideUp(200);
   });
	 事件切换 hover  如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
    $(".nav>li").hover(function() {
        $(this).children("ul").slideToggle();
    });
  1. stop停止动画
$(".nav>li").hover(function() {
        // stop 方法必须写到动画的前面
        $(this).children("ul").stop().slideToggle();
    });
  1. 淡入淡出
$(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() {
         //  修改透明度 fadeTo() 这个速度和透明度要必须写
         $("div").fadeTo(1000, 0.5);

     });

11 自定义动画

$(function() {
     $("button").click(function() {
         $("div").animate({
             left: 500,
             top: 300,
             opacity: .4,
             width: 500
         }, 500);
     })
 })

12 属性操作 自带属性prop 自定义属性attr

$(function() {
        //1. element.prop("属性名") 获取元素固有的属性值
        console.log($("a").prop("href"));
        $("a").prop("title", "我们都挺好");
        $("input").change(function() {
            console.log($(this).prop("checked"));

        });
        // console.log($("div").prop("index"));
        // 2. 元素的自定义属性 我们通过 attr()
        console.log($("div").attr("index"));
        $("div").attr("index", 4);
        console.log($("div").attr("data-index"));
        // 3. 数据缓存 data() 这个里面的数据是存放在元素的内存里面
        $("span").data("uname", "andy");
        console.log($("span").data("uname"));
        // 这个方法获取data-index h5自定义属性 第一个 不用写data-  而且返回的是数字型
        console.log($("div").data("index"));
    })
  1. 获取设置元素内容 html() 获取设置元素文本内容 text() . 获取设置表单值 val()
console.log($("div").html());
  // $("div").html("123");
console.log($("div").text());
$("div").text("123");

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

14 遍历对象 $each(数据,function(index,ele) {}) 方法遍历元素

var arr = ["red", "green", "blue"];
        $("div").each(function(i, domEle) {
            // 回调函数第一个参数一定是索引号  可以自己指定索引号号名称
            // console.log(index);
            // console.log(i);
            // 回调函数第二个参数一定是 dom元素对象 也是自己命名
            // console.log(domEle);
            // domEle.css("color"); dom对象没有css方法
            $(domEle).css("color", arr[i]);
            sum += parseInt($(domEle).text());
        })
        console.log(sum);
        // 2. $.each() 方法遍历元素 主要用于遍历数据,处理数据
        // $.each($("div"), function(i, ele) {
        //     console.log(i);
        //     console.log(ele);
        // });
        // $.each(arr, function(i, ele) {
        //     console.log(i);
        //     console.log(ele);
        // })
        $.each({
            name: "andy",
            age: 18
        }, function(i, ele) {
            console.log(i); // 输出的是 name age 属性名
            console.log(ele); // 输出的是 andy  18 属性值
        })
    })

15.创建 添加 删除 元素

$(function() {
        // 1. 创建元素
        var li = $("<li>我是后来创建的li</li>");
        // 2. 添加元素
        // (1) 内部添加
        // $("ul").append(li);  内部添加并且放到内容的最后面 
        $("ul").prepend(li); // 内部添加并且放到内容的最前面
        // (2) 外部添加
        var div = $("<div>我是后妈生的</div>");
        // $(".test").after(div);
        $(".test").before(div);
        // 3. 删除元素
        // $("ul").remove(); 可以删除匹配的元素 自杀
        // $("ul").empty(); // 可以删除匹配的元素里面的子节点 孩子
        $("ul").html(""); // 可以删除匹配的元素里面的子节点 孩子
    })
  1. 元素宽度
// 1. width() / height() 获取设置元素 width和height大小 
    console.log($("div").width());
    // $("div").width(300);

    // 2. innerWidth() / innerHeight()  获取设置元素 width和height + padding 大小 
    console.log($("div").innerWidth());

    // 3. outerWidth()  / outerHeight()  获取设置元素 width和height + padding + border 大小 
    console.log($("div").outerWidth());

    // 4. outerWidth(true) / outerHeight(true) 获取设置 width和height + padding + border + margin

17.获取位置

// 1. 获取设置距离文档的位置(偏移) offset
        console.log($(".son").offset());
        console.log($(".son").offset().top);
        // $(".son").offset({
        //     top: 200,
        //     left: 200
        // });
        // 2. 获取距离带有定位父级位置(偏移) position   如果没有带有定位的父级,则以文档为准
        // 这个方法只能获取不能设置偏移
        console.log($(".son").position());
        // $(".son").position({
        //     top: 200,
        //     left: 200
        // });
    })

18.卷去头部scrollTop

$(document).scrollTop(100);
        // 被卷去的头部 scrollTop()  / 被卷去的左侧 scrollLeft()
        // 页面滚动事件
        var boxTop = $(".container").offset().top;
        $(window).scroll(function() {
            // console.log(11);
            console.log($(document).scrollTop());
            if ($(document).scrollTop() >= boxTop) {
                $(".back").fadeIn();
            } else {
                $(".back").fadeOut();
            }
        });
        // 返回顶部
        $(".back").click(function() {
            // $(document).scrollTop(0);
            $("body, html").stop().animate({
                scrollTop: 0
            });
            // $(document).stop().animate({
            //     scrollTop: 0
            // }); 不能是文档而是 html和body元素做动画
        })
    })
  1. 注册事件 on
(1) on可以绑定1个或者多个事件处理程序
$("div").on("mouseenter mouseleave", function() {
        $(this).toggleClass("current");
    });
    // (2) on可以实现事件委托(委派)
    // $("ul li").click();
    $("ul").on("click", "li", function() {
        alert(11);
    });
    // click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
    // (3) on可以给未来动态创建的元素绑定事件
       $("ol").on("click", "li", function() {
        alert(11);
    })
    var li = $("<li>我是后来创建的</li>");
    $("ol").append(li);
})

20 事故解绑与只触发一次事件

事件解绑 off 
        // $("div").off();  // 这个是解除了div身上的所有事件
        $("div").off("click"); // 这个是解除了div身上的点击事件
        $("ul").off("click", "li");
        // 2. one() 但是它只能触发事件一次
        $("p").one("click", function() {
            alert(11);
        })

21.自动触发事件 click() trigger() triggerHandler()

// 自动触发事件
        // 1. 元素.事件()
        // $("div").click();会触发元素的默认行为
        // 2. 元素.trigger("事件")
        // $("div").trigger("click");会触发元素的默认行为
        $("input").trigger("focus");
        // 3. 元素.triggerHandler("事件") 就是不会触发元素的默认行为
        $("div").triggerHandler("click");
        $("input").on("focus", function() {
            $(this).val("你好吗");
        });
        // $("input").triggerHandler("focus");
    })
  1. 对象拷贝 深拷贝与浅拷贝 extend
$.extend(target, obj);
    $.extend(targetObj, obj);
    console.log(targetObj); // 会覆盖targetObj 里面原来的数据
   1. 浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象
  targetObj.msg.age = 20;
  console.log(targetObj);
 console.log(obj);
  深拷贝把里面的数据完全复制一份给目标对象 如果里面有不冲突的属性,会合并到一起 
   $.extend(true, targetObj, obj);
   // console.log(targetObj); // 会覆盖targetObj 里面原来的数据
   targetObj.msg.age = 20;
   console.log(targetObj); // msg :{sex: "男", age: 20}
   console.log(obj);
  1. 多库共存 自定义库
$(function() {
    function $(ele) {
        return document.querySelector(ele);
    }
    console.log($("div"));
    // 1. 如果$ 符号冲突 我们就使用 jQuery
    jQuery.each();
    // 2. 让jquery 释放对$ 控制权 让用自己决定
    var suibian = jQuery.noConflict();
    console.log(suibian("span"));
    suibian.each();
})