jQuery


jQuery 简介

jQuery123.com

jQuery.com

console.log(jQuery); console.log($ === jQuery);

jQuery 写法

<div id="box"></div>
$(document).ready(function () {
  var box = document.getElementById("box");
  console.log(box);
});
$().ready(function () {
  var box = document.getElementById("box");
  console.log(box);
});
$(function () {
  var box = document.getElementById("box");
  console.log(box);
});

ready 与 window.onload 有区别吗

<img src="http://www.google.com/1.jpg" alt="" />
$(document).ready(function () {
  console.log("ready完成了");
}); //dom元素加载完成之后就会触发,仅仅是标签
window.onload = function () {
  console.log("load完成了");
}; //页面整个下载完成
document.addEventListener("DOMContentLoaded", function () {
  console.log("dom内容加载完毕");
}); //所有dom元素加载完成之后就会触发,同于ready,早于ready

jQuery 特点:选择器

小 demo 点击创建

<button id="btn">按钮</button>

原生 js 写法

var btn = document.getElementById("btn");
btn.onclick = function () {
  var div = document.createElement("div");
  div.style.width = "100px";
  div.style.height = "100px";
  div.style.background = "green";
  document.body.appendChild(div);
};

jQuery 的写法

$("#btn").click(function () {
  $("div")
    .css({
      width: "100px",
      height: "100px",
      background: "green",
    })
    .appendTo("body");
});

强大的选择器

<ul id="ulId" class="ulClass">
  <li>red</li>
  <li>green</li>
  <li name="blue">blue</li>
</ul>
var li = $("ul li:nth-child(1)");
var li = $("#ulId li:first-child");
var li = $(".ulClass li:first-child + li");
var li = $("li[name=blue]");
//var li=document.querySelector('#ulId li:first-child');
//li.style.background='green';
li.css("background", "green");

链式操作

<p class="text"></p>
$('.text').html('陈学辉').css('border', '1px solid
#000').width(200).height(200).css('background', 'grey');

原生 js 获取到的对象与 jquery 取到的对象的对比

<h1>大标题</h1>
var h1 = document.querySelector("h1");
h1.style.color = "red";
//h1.css('color','pink');	//报错,原生的对象不使用jquery里的方法
var $h1 = $("h1");
$h1.css("color", "green");
//$h1.style.color='pink';	//报错,jquery的对象也不能使用原后的方法

console.log(h1 == $h1); //false
console.log(h1);
console.log($h1);

转化

//原生转jquery
$(h1).css("color", "blue");

//jquery转原生
$h1[0].style.color = "purple";

jQuery 选择器

DOM 元素,没有权重

基础选择器

<ul id="list1">
  <li>red</li>
  <li class="red">red</li>
  <li>red</li>
  <li>red</li>
  <li>red</li>
</ul>
<ul id="list2">
  <li>red</li>
  <li>red</li>
  <li class="red">red</li>
  <li>red</li>
  <li>red</li>
</ul>
<p class="red">red</p>
body {
  padding-bottom: 1000px;
}

ul {
  width: 500px;
  margin: 0;
  padding: 0;
  list-style: none;
}

li {
  padding: 20px;
  margin-top: 10px;
  border: 1px solid #ccc;
}
$("#list1").css("background", "green");
$(".red").css("background", "grey");
$("li").css("border", "2px solid pink");
$("*").css("border", "2px solid orange");
$("li,p").css("font-size", "20px");

层级选择器

<div>
  <a href="#" class="link">链接</a>
  <a href="#">链接</a>
  <a href="#">链接</a>
  <a href="#">链接</a>
  <p>
    <a href="#">链接</a>
  </p>
</div>
$("div a").css("color", "green");
// $选择到的是一个集合
$("div>a").css("color", "red");
$("div a.link + a").css("color", "purple");
$("div a.link ~ a").css("color", "blue"); //后面所有兄弟节点

属性选择器

<ul id="ulColor">
  <li class="red">color</li>
  <li title="blue">color</li>
  <li title="css-1">color</li>
  <li id="color1-green">color</li>
  <li id="red-1color">color</li>
  <li lang="encnhk">color</li>
  <li lang="en cn">color</li>
  <li class="cl" name="kaivon">color</li>
</ul>
$('#ulColor li[class]').css('background', 'pink'); $('#ulColor
li[title=blue]').css('background', 'grey'); $('#ulColor
li[title!=blue]').css('background', 'yellowgreen'); $('#ulColor
li[title|=css]').css('background', 'darkgreen'); //前缀是用-隔开的 $('#ulColor
li[id^=color]').css('background', 'hotpink'); //以属性值为开始(不需要-隔开)
$('#ulColor li[id$=color]').css('background', 'purple'); //以...结尾 $('#ulColor
li[lang*=cn]').css('background', 'olive'); //属性中包含cn字符串 $('#ulColor
li[lang~=cn]').css('background', 'skyblue'); //属性中包含cn单词,用空格隔开
$('#ulColor li[class=cl][name=kaivon]').css('background', 'teal');
//属性中包含cn单词,用空格隔开

基础过滤选择器

<ol id="olColor">
  <li>color</li>
  <li>color</li>
  <li>color</li>
  <li lang="en">color</li>
  <li id="tar">color</li>
  <li>color</li>
  <li>color</li>
  <li>color</li>
</ol>
<h1>h1</h1>
<h2>h2</h2>
<h3>h3</h3>
<h4>h4</h4>
$("#olColor li:eq(1)").css("border", "5px solid pink"); // 0 1 2
$("#olColor li:gt(1)").css("border", "5px solid grey"); //大于
$("#olColor li:lt(3)").css("border", "5px solid yellowgreen"); //小于
$("#olColor li:not(#olColor li:eq(2))").css("border", "5px solid darkgreen"); //排除
$("#olColor li:even").css("border", "5px solid hotpink"); //偶数
$("#olColor li:odd").css("border", "5px solid purple"); //奇数
$("#olColor li:first").css("border", "5px solid olive"); //第一个
$("#olColor li:last").css("border", "5px solid skyblue"); //最后一个
$("#olColor li:lang(en)").css("border", "5px solid teal"); //lang属性
$("#olColor li:target(tar)").css("border", "5px solid yellow"); //tatget属性  锚点
$(":root").css("border", "2px solid blue"); //根节点
$(":header").css("border", "5px solid darkgreen"); //所有的h标签

子元素过滤器

<div id="paragraph">
  <p>段落</p>
  <p>段落</p>
  <span>段落</span>
  <p>段落</p>
  <span>段落</span>
  <p>段落</p>
  <span>段落</span>
</div>
<div id="only">
  <p>唯一的一个子元素</p>
</div>
<div id="only-two">
  <span>span</span>
  <p>p</p>
</div>
$("#paragraph p:first-child").css("color", "pink"); //第一个子元素必需是p标签
$("#paragraph span:first-of-type").css("color", "yellowgreen"); //选择到第1个span标签
$("#paragraph span:last-child").css("color", "darkgreen");
$("#paragraph p:last-of-type").css("color", "hotpink");
$("#paragraph p:nth-child(2)").css("color", "blue"); //选择到第2个子元素,并且这个子元素必需是p标签
$("#paragraph span:nth-of-type(2)").css("color", "olive");
$("#only p:only-child").css("color", "skyblue"); //选择到只有一个子元素的标签
$("#only-two span:only-of-type").css("font-size", "30px"); //选择到只有一个span子元素的标签

内容过滤选择器

<div id="content">kaivon</div>
<div></div>
<div id="has">
  <div>
    <p>段落</p>
  </div>
</div>
<div>
  <h1 id="title">大标题</h1>
</div>
$("#content:contains(kaivon)").css("color", "blue");
$("div:empty").css({
  width: "100px",
  height: "100px",
  background: "green",
});
$("#has:has(p)").css("border", "1px solid #000");
$("#title:parent").css("border", "1px solid #f00");

表单过滤选择器

<input type="button" value="按钮1" />
<button>按钮2</button>
<div id="sex"><input type="checkbox" /><input type="checkbox" /></div>
<div><input type="checkbox" checked /><input type="checkbox" /></div>
$(':button').css('border', '2px solid #f0f'); //选择到所有的按钮 $('#sex
input:checkbox').wrap('<span></span>').parent().css('border', '2px solid
purpLe');//所有的链式操作都是选择的第一个 $(':checked').wrap('<span
></span>').parent().css('border', '2px solid blue');

DOM 操作

body {
  padding-bottom: 1000px;
}
.red {
  background: red;
}
.green {
  background: green;
}
.blue {
  background: blue;
}
.active {
  background: greenyellow;
}
.css {
  border: 2px solid #000;
}

操作 class

<div class="setClass">
  <ul>
    <li>red</li>
    <li class="green blue">green</li>
    <li class="red green">blue</li>
  </ul>
  <p class="active">点击切换class</p>
</div>
<hr />
$(".setClass li:first").addClass("red"); //添加class
$(".setClass li:eq(1)").removeClass("green"); //移除class(不给参数,移除所有class)
console.log(
  //是否包含某个class
  $(".setClass li:last").hasClass("green"), //true
  $(".setClass li:last").hasClass("orange") //false
);
//toggleClass 切换class。在添加、删除间切换
$(".setClass p").click(function () {
  $(this).toggleClass();
});

插入元素(内部插入)找到父级添加子元素

<div class="insideAdd">
  <p>在内部插入元素</p>
</div>
<hr />
$(".insideAdd").append("<h2>append方法插入</h2>"); //append(),在元素里面的末尾插入DOM。这个与appendChild的方法是一样的。
$(".insideAdd").append($(".insideAdd p"));
$("<h2>appendTo方法插入</h2>").appendTo(".insideAdd"); //将匹配的元素插入到目标元素的最后面。这个与append一样,只不过内容和目标的位置相反。append方法里直接写一个标签的字符串,就相当于创建一个DOM对象
$(".insideAdd").prepend("<h2>prepend方法插入</h2>"); //prepend(),与append的语法一样,只不过是插入到父级元素的前面
$("<h2>prependTo方法插入</h2>").prependTo(".insideAdd"); //prependTo(),与appendTo是一样的,不同的也是插入的位置是在前面

插入元素(外部插入)找到元素添加兄弟节点

<div class="outsideAdd">
  <h2>在外部插入元素</h2>
</div>
<hr />
//插入元素(外部插入,插入为兄弟节点)
$(".outsideAdd h2").after("<p>after方法添加到h2后面</p>"); //after()(语法类似于append)
$("<p>insertAfter方法添加到h2后面</p>").insertAfter(".outsideAdd h2"); //insertAfter()(语法类似于appendTo)
$(".outsideAdd h2").before("<p>before方法添加到h2前面</p>"); //before()(语法类似于prepend)
$("<p>insertBefore方法添加到h2前面</p>").insertBefore(".outsideAdd h2"); //insertBefore()(语法类似于prependTo)

插入元素,html 与 text 方法

插入元素,html 与 text 方法。相当于原生的 innerHTML、innerText 属性

<div class="htmlText">
  <p>html与text方法</p>
</div>
console.log($(".htmlText").html()); //获取
$(".htmlText").html(
  "<h2>这是html方法添加的标题</h2><p>这是html方法添加的内容</p>"
); //设置
console.log($(".htmlText").text()); //获取
$(".htmlText").text(
  "<h2>这是text方法添加的标题</h2><p>这是<em>text</em>方法添加的内容</p>"
); //纯文本

包裹元素

<div class="wrap">
  <span>red</span>
  <span>green</span>
  <span>blue</span>
</div>
$(".wrap span").wrap("<li>"); //wrap(),在每个匹配的元素外层包上一个html元素
$(".wrap li").wrapAll("<ul>"); //wrapAll(),在所有匹配元素外面包一层HTML元素
$(".wrap span").wrapInner("<strong>"); //wrapInner(),在匹配元素里的内容外包一层结构
$(".wrap li").unwrap(); //.unwrap(),将匹配到的元素的父级删除

删除元素

<div class="del">
  <div class="title">标题</div>
  <ul>
    <li>red</li>
    <li>green</li>
    <li>blue</li>
  </ul>
  <div class="end">底部</div>
</div>
//$('.del .title').remove();	//remove(),移除自己
$("div").remove(".title"); //也可以添加参数。从div中移除一个.title的div
$(".del ul").empty(); //empty(),清空子元素

$(".del .end").click(function () {
  alert(1);
});
//detach(),与remove()一样,这两个方法都有一个返回值,返回被删除的DOM。它们的区别就在这个返回值身上
var end = $(".del .end").detach(); //再次添加后是有事件的
//var end=$('.del .end').remove();	//再次添加后没有事件,不会弹出alert(1)了
setTimeout(function () {
  $(".del").append(end); //1s后,被删除的那个元素会被重新添加上
}, 1000);

克隆与替换元素

<div class="clone">
  <p>这是一段要被克隆的文字</p>
  <h2 class="replaceAll">这是一段要主动替换的文字</h2>
  <div class="name1">陈学辉</div>
  <div class="name2">kaivon</div>
  <h2 class="replaceWidth">这是一段要被动替换的文字</h2>
</div>
$(".clone p").click(function () {
  alert(2);
});
//$('.clone p').clone().appendTo('.clone');
$(".clone p").clone(true).appendTo(".clone"); //clone的参数为true时表示,会把事件也克隆了
$("<h3>使用replaceAll方法主动替换</h3>").replaceAll(".clone .replaceAll"); //创建一个元素然后用它替换掉其它元素
$(".clone .name2").replaceAll(".clone .name1"); //使用已有的元素替换掉其它元素(剪切操作)
$(".clone .replaceWidth").replaceWith("<h3>使用replaceWidth方法被动替换</h3>");

属性操作-通用属性操作

<div class="attr">
  <img src="images/img_01.jpg" alt="" kaivon="liu" />
  <!-- <img src="images/img_02.jpg" alt="" kaivon="liu"> -->
  <input type="text" value="这是一个正经的输入框" />
</div>
console.log($(".attr img").attr("src")); //images/img_01.jpg(如果有多个img的话,它返回的是第一个img的src值)
$(".attr img").attr("title", "这是一张美食图片"); //如果有多个img的话,设置的是所有的img
$(".attr img").attr({
  //同时设置多个属性
  class: "delicious",
  alt: "美食",
});
console.log($(".attr img").prop("src"));
console.log(
  $(".attr img").attr("kaivon"), //liu
  $(".attr img").prop("kaivon") //undefined
);
$(".attr img").prop({
  id: "food",
  kaivon: "liuliu", //自定义的属性prop并没有添加到DOM标签身上,但是它会添加到DOM对象身上
});
$(".attr img").attr("kaivon", "liuliuliu");
$(".attr img").removeAttr("kaivon");
$(".attr img").removeProp("id"); //删除的是DOM对象身上的属性,并不是DOM标签身上的属性
$(".attr img").prop("index", 5);
console.log($(".attr img").prop("index")); //5 这条属性是添加在DOM对象身上
$(".attr img").removeProp("index");
console.log($(".attr img").prop("index")); //undefined removeProp是删除DOM对象身上的属性
console.log($(".attr input").val()); //这是一个正经的输入框
$(".attr input").val("这不是一个输入框");

属性操作-css 类属性操作

<div class="css">
  <h2></h2>
  <p></p>
  <div></div>
</div>
console.log(
  $(".css").css("border"), //2px solid rgb(0, 0, 0)
  $(".css").css("height") //19.9125px
);
$(".css h2")
  .css("width", "200px")
  .css("height", "100px")
  .css("background", "#ccc")
  .text("插入一个标题");

$(".css h2").css({
  color: "green",
  fontSize: "30px",
  "line-height": "100px",
});
$(".css p").css({
  width: "200px",
  height: "200px",
  padding: "20px",
  margin: "20px auto",
  border: "2px solid #f00",
});
console.log(
  $(".css p").width(), //200
  $(".css p").height(), //200
  $(".css p").innerWidth(), //240	获取包含padding的宽度(clientWidth)
  $(".css p").innerHeight(), //240
  $(".css p").outerWidth(), //244	获取包含border的宽度(offsetWidth)
  $(".css p").outerHeight() //244
);
$(".css p").width(300).height(100).innerWidth(400).outerWidth(500); //给width与给innerWidth设置的都是width属性的值。但是innerWidth与outerWidth都会动态的算出一个宽度值,赋给width属性

$(".css").css("position", "relative"); //先把父级设置成相对定位
$(".css div").css({
  width: "100px",
  height: "100px",
  background: "green",
  position: "absolute",
  left: "100px",
  top: "200px",
});
//相对于document
console.log(
  $(".css div").offset().left, //110
  $(".css div").offset().top //1648.3499755859375
  //此方法没有.right与.bottom
);
$(".css div").offset({
  left: 200,
  top: 1800,
});

//获取相对于有定位的父级的位置信息
console.log($(".css div").position().left, $(".css div").position().top);

console.log($(document).scrollTop(), $(document).scrollLeft());
setTimeout(function () {
  $(document).scrollTop(300);
}, 2000);

遍历

获取后代元素

<ul class="child mb">
  <li>red</li>
  <li>
    <ul>
      <li>green</li>
      <li><span>blue</span></li>
    </ul>
  </li>
  <li><span>yellow</span></li>
</ul>
$(".child").children().css("border-color", "green"); //.children()	获取所有子元素(第一层)
$(".child").children(":eq(1)").css("border-width", "3px"); //可以接收一个选择器的参数,这个选择器用来过滤子元素
$(".child").find("span:eq(0)").css({
  //.find()	获取匹配到的后代元素。它与children不同的地方为:children找到的是子元素,find找到的是后代元素
  "font-size": "30px",
  color: "red",
});

获取祖先元素

<ul class="parent mb" style="position: relative;">
  <li>white</li>
  <li>
    <ul>
      <li>black</li>
      <li>orange</li>
      <li>gold</li>
    </ul>
  </li>
  <li>grey</li>
</ul>
$(".parent li ul li:first").parent("ul").css("border", "4px solid blue"); //.parent()		获取父元素。也可以加一个参数.ul。就表示要找到父级必需有个class
//$('.parent li ul li:first').parents().css('border','2px solid purple');
console.log($(".parent li ul li:first").parents()); //.parents()	获取祖先元素。所有祖先元素都会被找到,一直找到HTML
$(".parent li ul li:first").parents("ul").css("border", "2px solid purple");
$(".parent li ul li:first")
  .parentsUntil("li")
  .css("border", "5px solid purple"); //.parentsUntil()	获取祖先元素(但是有个范围,找到li就不再往上找了)
$(".parent li ul li:first").offsetParent().css("border", "5px solid teal"); //.offsetParent()	获取最近的有定位的祖先元素

获取祖先元素.closest()

获取祖先元素,与 parents 有点像。但区别是 closest 会找自己,parents 不会找自己

<ul class="closest mb">
  <li>
    <ul>
      <li>pink</li>
      <li>green</li>
    </ul>
  </li>
</ul>
$(".closest li ul li").closest("ul").css("border", "2px solid purple");

//$('.closest li ul li').parents('li').css('border','5px solid purple');
$(".closest li ul li").closest("li").css("border", "5px solid purple"); //会从自己查起,如果自己的标签满足的话,自己的标签就算

获取后面的兄弟元素

<ul class="next mb">
  <li>purple</li>
  <li>cyan</li>
  <li>
    <ul>
      <li>pink</li>
    </ul>
  </li>
  <p>brown</p>
  <div>skyblue</div>
</ul>
$(".next li:first").next("li").css("background", "cyan"); //.next()	获取后面紧临的兄弟元素。参数也是个选择器,可选
$(".next li:first").nextAll("li").css("border", "5px solid #000"); //.nextAll()	获取后面所有的同辈兄弟元素
$(".next li:first").nextUntil("div").css("border", "5px solid red"); //获取后面所有的同辈兄弟元素(但是有个范围,找到div就不找了)

获取前面的兄弟元素(与 next 一样)

<ul class="prev mb">
  <div>skyblue</div>
  <p>brown</p>
  <li>
    <ul>
      <li>pink</li>
    </ul>
  </li>
  <li>cyan</li>
  <li>purple</li>
</ul>
$(".prev li:last").prev("li").css("background", "cyan");
$(".prev li:eq(3)").prevAll("li").css("border", "5px solid #000");
$(".prev li:eq(3)").prevUntil("div").css("border", "5px solid red");

获取所有的兄弟节点

<ul class="siblings">
  <li>red</li>
  <li class="select">green</li>
  <li>blue</li>
  <li class="select">yellow</li>
  <li>
    <ul>
      <li>pink</li>
    </ul>
  </li>
</ul>
$(".siblings li:eq(2)").siblings().css("border", "5px solid skyblue");
$(".siblings li:eq(2)").siblings(".select").css("background", "yellow"); //添加了参数,进行过滤

事件

<button id="btn1">事件名称函数</button>
<button id="btn2">通过on添加</button>
<div id="btn3">
  <h2>标题</h2>
  <p>段落</p>
</div>

<div id="btn4">
  <button>通过one添加</button>
</div>

<button id="btn5">解除事件</button>

<button id="btn6">trigger触发事件</button>

<button id="trigger">trigger</button>
<button id="triggerHandler">triggerHandler</button>
<br />
<input type="text" value="获取焦点" />
//绑定事件1:通过事件名称函数
$("#btn1")
  .mouseover(function () {
    $(this).css("background", "orange");
  })
  .mouseout(function () {
    $(this).css("background", "grey");
  });
<ul id="color">
  <li>red</li>
  <li>green</li>
  <li>blue</li>
  <li>yellow</li>
</ul>
//绑定事件2:通过on添加
$("#btn2").on("click", function () {
  $(this).css("background", "blue");
});
$("#btn2").on("click", { name: "kaivon" }, function (event) {
  console.log(event.data.name);
});
$("#btn3").on("click", "h2", { color: "red" }, function (event) {
  //$(this)指向h2
  $(this).css("border", "1px solid " + event.data.color);
});
//on可以添加多个事件
$("#btn2").on({
  mouseover: function () {
    $(this).css("background", "pink");
  },
  mouseout: function () {
    $(this).css("background", "cyan");
  },
});
<div id="bubble">
  <h2>
    <span>陈学辉</span>
  </h2>
</div>
//绑定事件3:one()
$("#btn4").one("click", "button", { color: "purple" }, function (event) {
  $(this).css("background", event.data.color);
  console.log("只会打印一次");
});
<button id="btn7">链式操作</button>
//解除事件:off()
$("#btn5").click(function () {
  //$('#btn1').off();	//没有参数,会把所有的事件全部解除
  $("#btn1").off("mouseover");
});

//手动触发绑定事件:trigger()
$("#btn6").on({
  click: function () {
    console.log("btn6的点击事件");
  },
  mouseover: function (event, name, age) {
    console.log("btn6的鼠标移入事件:" + name + " : " + age);
    $(this).css("background", "brown");
  },
  end: function () {
    console.log("这是一个自定义的事件");
  },
});

setTimeout(function () {
  $("#btn6").trigger("click");
}, 500);
setTimeout(function () {
  $("#btn6").trigger("mouseover", ["kaivon", 18]);
}, 1000);
setTimeout(function () {
  $("#btn6").trigger("end");
}, 1500);

手动触发绑定事件:triggerHandler()

trigger 与 triggerHandler 的区别

区别 1:trigger()会触发事件的默认行为;triggerHandler()不会触发事件的默认行为

$("input").focus(function () {
  console.log("获取到焦点了");
});
$("#trigger").click(function () {
  $("input").trigger("focus");
});
$("#triggerHandler").click(function () {
  $("input").triggerHandler("focus");
});

区别 2:trigger()会执行所有选中元素的事件;triggerHandler()只会执行第一个元素的事件

$("#color li").click(function () {
  console.log($(this).html() + " " + $(this).index());
});
setTimeout(function () {
  //$('#color li').trigger('click');
  $("#color li").triggerHandler("click");
}, 2000);

区别 3:trigger()会冒泡;triggerHandler()不会冒泡

$("#bubble h2").click(function () {
  console.log("h2被点击了");
});
$("#bubble span").click(function () {
  console.log("span被点击了");
});
setTimeout(function () {
  //$('#bubble span').trigger('click');
  $("#bubble span").triggerHandler("click");
}, 2500);

区别 4:trigger()可以使用链式操作;triggerHandler()不可以使用链式操作

$("#btn7").on({
  mouseover: function () {
    $(this).css("width", "200px");
    //return $(this);就能使triggerHandler能链式操作
  },
  mouseout: function () {
    $(this).css("height", "200px");
  },
});
setTimeout(function () {
  // $('#btn7').trigger('mouseover').trigger('mouseout');
  $("#btn7").triggerHandler("mouseover").triggerHandler("mouseout");
}, 3000);

事件对象

$("#btn8").click(function (event) {
  console.log(event);
});
$("#btn9")[0].onclick = function (ev) {
  console.log(ev);
};

内置特效

基本特效

<button id="hide">隐藏</button>
<button id="show">显示</button>
<button id="toggle">隐藏/显示切换</button>
$("#hide").click(function () {
  //$('#box').hide('fast');
  //$('#box').hide('nomal');
  //$('#box').hide('slow');
  $("#box").hide(4000, function () {
    console.log("隐藏动画完成了");
  });
});
$("#show").click(function () {
  $("#box").show("nomal", function () {
    console.log("显示动画完成了");
  });
});

var n = 0;
$("#toggle").click(function () {
  $("#box").toggle("nomal", function () {
    var re = n++ % 2;
    //console.log(n++ % 2);
    if (re == 0) {
      console.log("隐藏动画结束了");
    } else {
      console.log("显示动画结束了");
    }
  });
});

滑动特效

<button id="slideUp">滑动隐藏</button>
<button id="slideDown">滑动显示</button>
<button id="slideToggle">滑动隐藏/显示切换</button>
$("#slideUp").click(function () {
  $("#box").slideUp(4000, function () {
    console.log("滑动隐藏动画结束了");
  });
});
$("#slideDown").click(function () {
  $("#box").slideDown("nomal", function () {
    console.log("滑动显示动画结束了");
  });
});

var n = 0;
$("#slideToggle").click(function () {
  $("#box").slideToggle("nomal", function () {
    var re = n++ % 2;
    //console.log(n++ % 2);

    if (re == 0) {
      console.log("滑动隐藏动画结束了");
    } else {
      console.log("滑动显示动画结束了");
    }
  });
});

渐变特效

<button id="fadeOut">淡出隐藏</button>
<button id="fadeIn">淡入显示</button>
<button id="fadeToggle">淡出隐藏/淡入显示切换</button>
<button id="fadeTo">透明度变化</button>
$("#fadeOut").click(function () {
  $("#box").fadeOut("slow", function () {
    console.log("淡出隐藏动画结束了");
  });
});
$("#fadeIn").click(function () {
  $("#box").fadeIn("slow", function () {
    console.log("淡入显示动画结束了");
  });
});

var n = 0;
$("#fadeToggle").click(function () {
  $("#box").fadeToggle("nomal", function () {
    var re = n++ % 2;
    //console.log(n++ % 2);

    if (re == 0) {
      console.log("淡出隐藏动画结束了");
    } else {
      console.log("淡入显示动画结束了");
    }
  });
});

$("#fadeTo").click(function () {
  $("#box").fadeTo("nomal", 0.5, function () {
    console.log("透明度变化完成了");
  });
});

自定义动画

<button id="animate">自定义动画</button>
/* $('#animate').click(function () {
			$('#box').animate({
				width: 200,
				left: '+=50',
				height: 'toggle',
				'border-radius': 50
			}, 500, function () {
				console.log('运动结束了');
			});
		}); */

//链式操作
$("#animate").click(function () {
  $("#box")
    .animate({ width: 200 }, "fast")
    .delay(2000) //让后面的动画延迟执行
    .animate({ height: 200 }, "slow")
    .delay(1000)
    .animate({ opacity: 0.5 }, 1000);
});

控制动画

<button id="stop">暂停动画</button>
<button id="finish">完成动画</button>
<div id="box">
  <img src="images/img_02.jpg" alt="" />
</div>
$("#stop").click(function () {
  $("#box").stop();
});
$("#finish").click(function () {
  $("#box").finish();
});

Ajax

get 请求

<button id="get">get请求</button> <button id="ajaxGet">ajax get请求</button>
$("#get").click(function () {
  $.get(
    "http://api.duyiedu.com/api/student/findAll",
    { appkey: "kaivon_1574822824764" },
    function (data) {
      console.log(data);
    },
    "json"
  );
});
$("#ajaxGet").click(function () {
  $.ajax({
    url: "http://api.duyiedu.com/api/student/findAll",
    type: "get",
    /* data:{
					appkey:'kaivon_1574822824764',
				}, */
    data: "appkey=kaivon_1574822824764",
    dataType: "json", //json格式展示
    success: function (data) {
      console.log(data);
      //后端已经给处理了跨域
    },
  });
});

post 请求

<div id="login">
  <div>
    <label for="username">用户名</label>
    <input type="text" name="account" />
  </div>
  <div>
    <label for="password">密码</label>
    <input type="password" name="password" />
  </div>
  <div>
    <button id="loginBtn1">登录(post请求)</button>
    <button id="loginBtn2">登录(ajax post请求)</button>
  </div>
</div>
$("#loginBtn1").click(function () {
  var username = $("#login input[name=account]").val();
  var password = $("#login input[name=password]").val();

  $.post(
    "http://api.duyiedu.com/api/student/stuLogin",
    { appkey: "kaivon_1574822824764", account: username, password: password },
    function (data) {
      console.log(data);
    },
    "json"
  );

  //console.log(username,password);
});

$("#loginBtn2").click(function () {
  $.ajax({
    url: "http://api.duyiedu.com/api/student/stuLogin",
    type: "post",
    data: {
      appkey: "kaivon_1574822824764",
      account: $("#login input[name=account]").val(),
      password: $("#login input[name=password]").val(),
    },
    dataType: "json",
    success: function (data) {
      console.log(data);
    },
    error: function (status) {
      console.log("错误原因:" + status);
    },
  });
});

JSON 请求

<button id="json">JSON请求</button>
$("#json").click(function () {
  $.getJSON(
    "http://api.duyiedu.com/api/student/findAll",
    { appkey: "kaivon_1574822824764" },
    function (data) {
      console.log(data);
    }
  );
});

jQuery 插件

jquery 插件.7z
jsonp

<!-- JSONP Json width Padding -->
<button id="jsonp">jsonp</button>
<script src="./jQuery源码/jquery-3.4.1.js"></script>
<script>
  $("#jsonp").click(function () {
    $.ajax({
      url: "http://developer.duyiedu.com/edu/testJsonp",
      dataType: "jsonp", //支持跨域
      success: function (data) {
        console.log(data);
      },
    });
  });
  // Request URL: http://developer.duyiedu.com/edu/testJsonp?callback=jQuery341041011376751943684_1615470566633&_=1615470566634
  // jQuery341041011376751943684回调函数
  // _时间戳,表示阻止浏览器缓存数据,防止在新数据来了时,还用缓存数据
</script>

加上 method:’post’,请求方式依旧 Request Method: GET
因为 JQuery 做出是否同源判断:
自己地址和请求地址同源:设置什么按什么发送
自己地址和请求地址不同源:跨域,get
JSONP 原理
script 标签发送网络请求
待学

自定义插件

1、给 jquery 对象本身扩展方法     $.abc()

$.extend({
  lg: function (value) {
    console.log(value);
  },
});
$.lg("kaivon"); //kaivon

2、给 jquery DOM 对象扩展方法       $(‘#box’).abc()

$.fn.extend({
  changeColor: function () {
    //$(this) 指向使用的DOM对象
    $(this).css("color", "red");
    return $(this);
  },
});
$.fn.changeSize = function () {
  $(this).css("fontSize", 50);
  return $(this);
};
$("h1").changeColor().changeSize();

封装拖拽的插件

$.fn.draggable = function (options) {
  options = options || {};
  options.limit = options.limit || false;

  var This = $(this);

  //修改DOM元素的样式
  $(this).css({
    position: "absolute",
    left: 0,
    top: 0,
    cursor: "move",
  });

  $(this).mousedown(function (ev) {
    var disX = ev.pageX - $(this).offset().left;
    var disY = ev.pageY - $(this).offset().top;

    $(document).mousemove(function (ev) {
      var l = ev.pageX - disX;
      var t = ev.pageY - disY;

      //如果用户传了limit:true,这个参数,就要处理拖拽的范围了
      if (options.limit) {
        if (l < 0) {
          l = 0;
        } else if (l > $(document).innerWidth() - This.outerWidth()) {
          l = $(document).innerWidth() - This.outerWidth();
        }

        if (t < 0) {
          t = 0;
        } else if (t > $(document).innerHeight() - This.outerHeight()) {
          t = $(document).innerHeight() - This.outerHeight();
        }
      }

      This.css({
        left: l,
        top: t,
      });
    });

    $(document).mouseup(function () {
      $(this).off();
    });

    return false;
  });
};

$("#box").draggable({
  limit: true,
});

$("#drag").draggable();

文章作者: Sunny
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sunny !
  目录