目錄html
#. 介紹前端
1. 優點jquery
2. 版本編程
3. jQuery對象後端
#. 查找標籤數組
1. 選擇器瀏覽器
/. 基本選擇器app
/. 層級選擇器框架
/. 基本篩選器
/. 使用jQuery實現彈框
/. 屬性選擇器
/. 表單經常使用篩選
2. 篩選器
/. 下一個元素
/. 上一個元素
/. 父親元素
/. 兒子和兄弟元素
/. 查找與篩選
#. 樣式標籤
1. 樣式操做
/. 樣式類
/. CSS
2. 位置
3. 尺寸
4. 文本操做
5. 屬性操做
/. 用於ID或自定義類
/. 用於checkbox和radio
/. prop與attr的區別
6. 文檔處理
/. 添加到指定元素內部
/. 添加到指定元素的外部
/. 移除和清空
/. 替換
/. 克隆
#. 事件
1. 經常使用事件
2. 綁定/移除 事件
3. 阻止後續事件執行
4. 阻止事件冒泡
5. 事件委託
6. each()
7. data()
#. 動畫效果
#. 介紹
jQuery是一個輕量級的、兼容多瀏覽器的JavaScript庫。
jQuery使用戶可以更方便地處理HTML Document、Events、實現動畫效果、方便地進行Ajax交互,可以極大地簡化JavaScript編程。它的宗旨就是:"Write less, do more."
jQuery官網 jQuery AP中文文檔 BootCDN
1. 優點
- 一款輕量級的JS框架。jQuery核心js文件才幾十kb,不會影響頁面加載速度。
- 豐富的DOM選擇器,jQuery的選擇器用起來很方便,好比要找到某個DOM對象的相鄰元素,JS可能要寫好幾行代碼,而jQuery一行代碼就搞定了,再好比要將一個表格的隔行變色,jQuery也是一行代碼搞定。
- 鏈式表達式。jQuery的鏈式操做能夠把多個操做寫在一行代碼裏,更加簡潔。
- 事件、樣式、動畫支持。jQuery還簡化了js操做css的代碼,而且代碼的可讀性也比js要強。
- Ajax操做支持。jQuery簡化了AJAX操做,後端只需返回一個JSON格式的字符串就能完成與前端的通訊。
- 跨瀏覽器兼容。jQuery基本兼容瞭如今主流的瀏覽器,不用再爲瀏覽器的兼容問題而傷透腦筋。
- 插件擴展開發。jQuery有着豐富的第三方的插件,例如:樹形菜單、日期控件、圖片切換插件、彈出窗口等等基本前端頁面上的組件都有對應插件,而且用jQuery插件作出來的效果很炫,而且能夠根據本身須要去改寫和封裝插件,簡單實用。
2. 版本
- 1.x:兼容IE678,使用最爲普遍的,官方只作BUG維護,功能再也不新增。所以通常項目來講,使用1.x版本就能夠了,最終版本:1.12.4 (2016年5月20日)
- 2.x:不兼容IE678,不多有人使用,官方只作BUG維護,功能再也不新增。若是不考慮兼容低版本的瀏覽器可使用2.x,最終版本:2.2.4 (2016年5月20日)
- 3.x:不兼容IE678,只支持最新的瀏覽器。須要注意的是不少老的jQuery插件不支持3.x版。目前該版本是官方主要更新維護的版本。
維護IE678是一件讓人頭疼的事情,通常咱們都會額外加載一個CSS和JS單獨處理。值得慶幸的是使用這些瀏覽器的人也逐步減小,PC端用戶已經逐步被移動端用戶所取代,若是沒有特殊要求的話,通常都會選擇放棄對678的支持。
3. jQuery對象
jQuery對象就是經過jQuery包裝DOM對象後產生的對象。jQuery對象是 jQuery獨有的。若是一個對象是 jQuery對象,那麼它就可使用jQuery裏的方法:例如$(「#i1」).html()。
$("#sign").html() 的意思是:獲取id值爲 sign 的元素的html代碼。其中 html() 是jQuery裏的方法。等價於:document.getElementById("sign").innerHTML
雖然jQuery對象是包裝DOM對象後產生的,可是jQuery對象沒法使用DOM對象的任何方法,同理DOM對象也不能使用jQuery裏的方法.
約定俗成:咱們在聲明一個jQuery對象變量的時候在變量名前面加上$:
#. 查找標籤
1. 選擇器
/. 基本選擇器
- id選擇器:$("#id")
- 標籤選擇器:$("標籤名")
- class選擇器:$(".類名")
- 全部元素選擇器:$("*")
- 組合選擇器:$("#id, .類名, 標籤名")
- 配合使用:$("div.sign") // 找到sign類的全部div標籤
/. 層級選擇器
- $("x y"):x的全部後代y (子子孫孫)
- $("x > y"):x的全部兒子y(兒子)
- $("x + y"):找到全部緊挨在x後面的y
- $("x ~ y"):x以後的全部兄弟y
/. 基本篩選器
- :first:第一個
- :last:最後一個
- :eq(index):索引等於index的元素
- :even:匹配全部索引值爲偶數的元素,從0開始計數
- :odd:匹配全部數索引值爲奇數的元素,從0開始計數
- :gt(index):匹配全部大於給定索引值的元素
- :lt(index):匹配全部小於給定索引值的元素
- :not(元素選擇器):移除全部知足not條件的標籤
- :has(元素選擇器):選取全部包含一個或多個標籤在其內的父標籤(指的是從後代元素找)
例:
- $("div:has(span)"):找到全部後代中有span標籤的父標籤
- $("div:has(.sign)"):找到全部後代中有sign類的div標籤
- $("li:not(.sign)"):找到全部不包含sign樣式類的li標籤
- $("li:not(:has(a))"):找到全部後代中不包含a標籤的li標籤
/. 使用jQuery實現彈框
-
-
-
-
-
<meta http-equiv="x-ua-compatible" content="IE-edge">
-
<meta name="viewport" content="width=device-width, initial-scale=1">
-
-
-
-
-
-
-
-
-
background-color: darkgrey;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<input type="button" value="彈" id="i0">
-
<div class="cover hide"></div>
-
-
<label for="i1">姓名</label>
-
<input id="i1" type="text">
-
<label for="i2">愛好</label>
-
<input id="i2" type="text">
-
<input type="button" id="i3" value="關閉">
-
-
-
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-
-
var $button1 = $("#i0")[0];
-
$button1.onclick=function () {
-
var $coverEle = $(".cover")[0];
-
var $modalEle = $(".modal")[0];
-
-
$($coverEle).removeClass("hide");
-
$($modalEle).removeClass("hide");
-
-
-
-
var $button2 = $("#i3")[0];
-
$button2.onclick=function () {
-
var $coverEle = $(".cover")[0];
-
var $modalEle = $(".modal")[0];
-
-
$($coverEle).addClass("hide");
-
$($modalEle).addClass("hide");
-
-
-
-
/. 屬性選擇器
[attribute]
[attribute=value]:屬性等於
[attribute!=value]:屬性不等於
例:
<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']"):取到checkbox類型的input標籤
$("input[type!='text']"):取到類型不是text的input標籤
/. 表單經常使用篩選
:text
:password
:file
:radio
:checkbox
:submit
:reset
:button
例:$(":checkbox"):找到全部的checkbox
表單對象屬性:
- :enabled:找到可用的input標籤
- :disabled:找到禁用的input標籤
- :checked:找到默認選中的select
- :selected:找到全部被選中的option
例1:
<form>
<input name="email" disabled="disabled" />
<input name="id" />
</form>
$("input:enabled") // 找到可用的input標籤
例2:
<select id="sign">
<option value="XEQ">西二旗</option>
<option value="SD">上帝</option>
<option value="SH">沙河</option>
</select>
$(":selected") // 找到全部被選中的option
2. 篩選器
/. 下一個元素
用於兄弟標籤
- $("#id").next() // 下一個元素
- $("#id").nextAll() // 後面的全部元素
- $("#id").nextUntil("#id2") // 後面的到 id2 的全部元素
/. 上一個元素
用於兄弟標籤
- $("#id").prev() // 上一個元素
- $("#id").prevAll() // 上面的全部元素
- $("#id").prevUntil("#id2") // 上面的到 id2 的全部元素
/. 父親元素
- $("#id").parent() // 找到當前元素上一級元素
- $("#id").parents() // 找到當前元素的全部的父輩元素
- $("#id").parentsUntil("#id2") // 找到當前元素的全部父輩,直到 id2 爲止,不包括id2
/. 兒子和兄弟元素
- $("#id").children() // 兒子們
- $("#id").siblings() // 兄弟們
/. 查找與篩選
查找用於找到全部與指定表達式匹配的元素,這個函數是找出正在處理的元素的後代元素的好方法.
篩選用於篩選出與指定表達式匹配的元素集合,這個方法用於縮小匹配的範圍,用逗號分隔多個表達式.
- $("div").find("p") 等價於: $("div p") // 找到div下的全部p(子子孫孫)
- $("div").filter("#sign") 等價於: $("div#sign") // 從結果中過濾出id爲 sign 的元素
#. 樣式標籤
1. 樣式操做
/. 樣式類
- addClass() // 添加指定的CSS類
- removeClass() // 移除指定的CSS類
- hasClass() // 判斷樣式存不存在
- toggleClass() // 切換CSS類名,若是有就刪除,若是沒有就添加
簡單示例:
/. CSS
CSS("color", "red") // DOM操做:tag.style.color = "red"
示例:
2. 位置
- $signEle.offset() // 獲取匹配元素在當前窗口的相對偏移或設置元素位置
- $signEle.position() // 獲取匹配元素相對父元素的偏移
- $signEle.scrollTop() // 獲取匹配元素相對滾動條頂部的偏移
- $signEle.scrollLeft() // 獲取匹配元素相對滾動條左側的偏移
.offset() 方法容許咱們檢索一個元素相對於文檔(document)的當前位置,它和 .position() 的差異在於:.position()是相對於父級元素的位移.
返回頂部示例:
-
-
-
-
-
<meta http-equiv="x-ua-compatible" content="IE-edge">
-
<meta name="viewport" content="width=device-width, initial-scale=1">
-
-
<script src="jquery-3.3.1.min.js"></script>
-
-
-
-
-
-
-
-
-
-
-
-
-
background-color: #2b669a;
-
-
-
-
-
-
-
-
-
-
-
<button id="b1" class="btn btn-default">
3. 尺寸
- height/width // 元素
- innerHeight/innerWidth // 元素 + 內填充
- outerHeight/outerWidth // 元素 + 內填充 + 邊框
4. 文本操做
- $("#sign").html() // 提取匹配到的第一個元素的html代碼和內容
- $("#sign").html(value) // 更改匹配到的全部html代碼和內容
- $("#sign").text() // 提取全部匹配到的元素的內容
- $("#sign").text(value) // 更改全部匹配到的元素的內容
- $("#sign").val() // 提取匹配到的第一個元素的值
- $("#sign").val(value) // 更改匹配到的全部的元素的值
- $("#sign").val([v1, v2]) // 設置多選的checkbox、多選的select的值
5. 屬性操做
/. 用於ID或自定義類
- attr(value) // 返回第一個匹配元素的屬性值
- attr(key, value) // 爲全部匹配元素設置一個屬性值
- attr({k1: v1, k2: v2}) // 爲全部匹配元素設置多個屬性值
- removeAttr() // 從每個匹配的元素中刪除一個屬性
/. 用於checkbox和radio
- peop() // 獲取屬性
- removeProp() // 移除屬性
注意:
在1.x及2.x版本的jQuery中使用attr對checkbox進行賦值操做時會出bug,在3.x版本的jQuery中則沒有這個問題。爲了兼容性,咱們在處理checkbox和radio的時候儘可能使用特定的prop(),不要使用attr("checked", "checked")。
<input type="checkbox" value="1">
<input type="radio" value="2">
<script>
$(":checkbox[value='1']").prop("checked", true);
$(":radio[value='2']").prop("checked", true);
</script>
/. prop與attr的區別
attr全稱attrbute(屬性),prop全稱property(屬性).
雖然都是屬性,但它們所指的屬性並不相同,attr所指的屬性是HTML標籤屬性,而prop所指的是DOM對象屬性,能夠認爲attr是顯式的,而prop是隱式的.
例:
針對上面的代碼:
因而可知,attr獲取一個標籤內沒有的東西會獲得一個undefined,而prop獲取的是這個DOM對象的屬性,所以checked爲false.
再來看看自定義屬性:
針對上面的代碼:
因而可知,prop不支持獲取標籤的自定義屬性
總結:
- 對於標籤上有的能看到的屬性和自定義屬性都用attr.
- 對於返回布爾值的屬性,如checkbox、radio和option的是否被選中都用prop.
6. 文檔處理
/. 添加到指定元素內部
- $(A).append(B) // 把B追加到A
- $(A).appendTo(B) // 把A追加到B
- $(A).prepend(B) // 把B前置到A
- $(A).prependTo(B) // 把A前置到B
/. 添加到指定元素的外部
- $(A).after(B) // 把B放到A的後面
- $(A).insertAfter(B) // 把A放到B的後面
- $(A).before(B) // 把B放到A的前面
- $(A).insertBefore(B) // 把A放到B的前面
/. 移除和清空
- A.remove() // 從DOM中刪除A
- A.empty() // 刪除A中的全部子元素
實例(表格內增刪改數據):
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<table class="sign2" border="1px">
-
-
-
-
-
-
<td colspan="2"><button class="add">添加</button></td>
-
-
-
-
-
-
-
-
<td><button class="editor">輯</button></td>
-
<td><button class="del">刪</button></td>
-
-
-
-
-
-
<td><button class="editor">輯</button></td>
-
<td><button class="del">刪</button></td>
-
-
-
-
<div class="sign1 hide" id="sign1">
-
<label>姓名<input id="name" type="text" value="zyk"></label><br>
-
<label>性別<input id="sex" type="text" value="boy"></label><br>
-
<button id="sub">提交</button>
-
<button id="ed">提交</button>
-
-
<div class="sign3" id="sign3">
-
<label>Test:<input class="sign3-name" type="text" placeholder="Please enter your name."></label>
-
-
-
-
-
-
var $tbodyEle = $("#tbody");
-
-
-
$("#sub").on("click", function () {
-
$("#sign1").addClass("hide");
-
$("#sign3").removeClass("hide");
-
$("#ed").removeClass("hide");
-
$("#sub").removeClass("hide");
-
-
-
var info = "<tr><td>" + value + "</td><td>" + name + "</td><td>" + sex + "</td><td><button class='editor'>輯</button></td></button></td><td><button class='del'>刪</button></td></tr>";
-
$("#tbody").append(info);
-
-
-
-
-
$tbodyEle.on("click", ".del", function () {
-
var tr = $(this).parent().parent();
-
var num = tr.nextAll().find("td:first").text();
-
for (var i=0;i<num.length;i++) {
-
-
$(tr.nextAll().find("td:first")[i]).text(n -=1);
-
-
-
-
-
-
-
$(".add").on("click", function () {
-
$("#sign1").removeClass("hide");
-
$("#sign3").addClass("hide");
-
$("#ed").addClass("hide");
-
-
-
-
$("#ed").on("click", function () {
-
$("#sign1").addClass("hide");
-
-
-
var index = $tbodyEle.data("number");
-
var info = "<td>" + index + "</td><td>" + name + "</td><td>" + sex + "</td><td><button class='editor'>輯</button></td></button></td><td><button class='del'>刪</button></td>";
-
-
-
$ediEle.removeClass("edi");
-
-
-
-
$tbodyEle.on("click", ".editor", function () {
-
$("#sign1").removeClass("hide");
-
$("#sign3").addClass("hide");
-
var tr = $(this).parent().parent();
-
-
var ed = $($(tr).children().first()[0]).text();
-
$tbodyEle.data("number", ed);
-
-
-
-
$(".sign3-name").on("blur", function () {
-
if ($(this).val().length < 1) {
-
$(this).attr("placeholder", "The name cannot be empty!");
-
$(this).addClass('red-name');
-
-
-
-
-
-
-
/. 替換
- $(A).replaceWith(B) // A替換成B
- $(B).replaceAll(A) // B替換成A
/. 克隆
clone(true) // 加上參數true時,會把綁定的事件也複製
示例:
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
background-color: deeppink;
-
-
-
-
-
-
background-color: dodgerblue;
-
-
-
-
-
-
-
-
<button id="b1">屠龍寶刀,點擊就送</button>
-
<button id="b2">屠龍寶刀,點擊就送</button>
-
-
-
// clone方法不加參數true,克隆標籤但不會克隆標籤帶的事件
-
$("#b1").on("click", function () {
-
$(this).clone().insertAfter(this);
-
-
-
// clone方法加參數true,克隆標籤而且克隆標籤帶的事件
-
$("#b2").on("click", function () {
-
$(this).clone(true).insertAfter(this);
-
-
-
-
#. 事件
1. 經常使用事件
- click(function () {...}) // 鼠標點擊時
- hover(function () {...}) // 獲取光標時
- blur(function () {...}) // 失去焦點時
- focus(function () {...}) // 獲取焦點時
- change(function () {...}) // 有變化時
- input(function () {...}) // input標籤專用,可用於檢測輸入框有無變化
- keyup(function () {...}) // 鍵盤事件
輸入框實時檢測示例:
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
<input type="text" id="sign">
-
<input type="text" id="sign2">
-
-
$("#sign").on("input", function () {
-
var value = $(this).val();
-
-
-
-
-
鍵盤事件示例:
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<td><input type="checkbox"></td>
-
-
-
-
<option value="1">上線</option>
-
<option value="2">離線</option>
-
<option value="3">離崗</option>
-
-
-
-
-
<td><input type="checkbox"></td>
-
-
-
-
<option value="1">上線</option>
-
<option value="2">離線</option>
-
<option value="3">離崗</option>
-
-
-
-
-
<td><input type="checkbox"></td>
-
-
-
-
<option value="1">上線</option>
-
<option value="2">離線</option>
-
<option value="3">離崗</option>
-
-
-
-
-
<td><input type="checkbox"></td>
-
-
-
-
<option value="1">上線</option>
-
<option value="2">離線</option>
-
<option value="3">離崗</option>
-
-
-
-
-
<td><input type="checkbox"></td>
-
-
-
-
<option value="1">上線</option>
-
<option value="2">離線</option>
-
<option value="3">離崗</option>
-
-
-
-
-
-
<button>shift鍵未按下</button>
-
-
-
-
-
-
$(window).on("keydown", function (event) {
-
if (event.keyCode === 16) {
-
-
$("button").css("color", "green");
-
$("button").text("shift鍵已按下");
-
-
-
-
// 全局事件,shift按鍵鬆開時將全局變量重置爲false
-
$(window).on("keyup", function (event) {
-
if (event.keyCode === 16) {
-
-
$("button").css("color", "red");
-
$("button").text("shift鍵未按下");
-
-
-
-
-
$("table select").on("change", function () {
-
-
-
var selectValue = $(this).val();
-
// 找到全部被選中的那一行的select,選中指定值
-
$("input:checked").parent().parent().find("select").val(selectValue);
-
-
-
-
-
2. 綁定/移除 事件
.on( events [, selector ], function () {...})
- events:要綁定的事件
- selector:選擇器(可選的)
- function:事件處理函數
.off( events [, selector ], function () {...})
off()方法可移除用on()方法綁定的事件處理程序.
3. 阻止後續事件執行
- return false // 常見阻止表單提交等
- e.preventDefault() // 阻止事件,e是事件函數的參數
注意:
像click、keydown等DOM中定義的事件,咱們均可以使用".on()"方法來綁定事件,可是"hover"這種jQuery中定義的事件就不能用".on()"方法來綁定了。
想使用事件委託的方式綁定hover事件處理函數,能夠參照以下代碼分兩步綁定事件:
$('ul').on('mouseenter', 'li', function() {
//綁定鼠標進入事件
$(this).addClass('hover');
});
$('ul').on('mouseleave', 'li', function() {
//綁定鼠標劃出事件
$(this).removeClass('hover');
});
4. 阻止事件冒泡
冒泡即執行了本級的事件後,又執行父級的事件.
示例(阻止冒泡):
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
-
-
-
-
-
-
-
-
-
$("span").click(function (e) {
-
-
e.stopPropagation(); // 阻止調用父級事件
-
-
-
$("p").click(function () {
-
-
-
$("div").click(function () {
-
-
-
-
-
5. 事件委託
事件委推是經過事件冒泡的原理,利用父標籤去捕獲子標籤的事件.
例:使表格中每一行的編輯和刪除按鈕都能觸發相應的事件
$("table").on("click", ".delete", function () {
// 經常使用的刪除按鈕綁定的事件
});
6. each()
一個通用的迭代函數,他能夠用來無縫迭代對象和數組,數組和相似數組的對象經過一個長度屬性(如一個函數的參數對象)來迭代數字索引,從0到length-1,其它對象經過其屬性名進行迭代.
例:
此方法用來迭代jQuery對象中的每個DOM元素,每次回調函數執行時,會傳遞當前循環次數做爲參數(從0開始計數).
因爲回調函數是在當前DOM元素爲上下文的語境中觸發的,因此關鍵字 this 老是指向這個元素.
以下操做:
注意:
jQuery的方法返回一個jQuery對象,遍歷jQuery集合中的元素-被稱爲隱式迭代過程,當這種狀況發生時,它一般不須要顯式地循環 .each() 方法。也就是說上面的例子沒有必要使用 .each() 方法,直接像下面這樣寫就能夠了:
終止循環:在遍歷過程當中可使用 return false 提早結束each循環
7. data()
在匹配的元素集合中的全部元素上存儲任意相關數據或返回匹配的元素集合中的第一個元素的給定名稱的數據存儲的值.
- $("sign").data("k", "v") // 給全部匹配的標籤保存一個鍵值對
- $("sign").data("k") // 返回匹配的第一個標籤的"k"的值
- $("sign").removeData("k") // 刪除匹配的標籤上的數據,若不加"k" 則清空全部
#. 動畫效果
// 基本
show([s,[e],[fn]])
hide([s,[e],[fn]])
toggle([s],[e],[fn])
// 滑動
slideDown([s],[e],[fn])
slideUp([s,[e],[fn]])
slideToggle([s],[e],[fn])
// 淡入淡出
fadeIn([s],[e],[fn])
fadeOut([s],[e],[fn])
fadeTo([[s],o,[e],[fn]])
fadeToggle([s,[e],[fn]])
// 自定義
animate(p,[s],[e],[fn])
示例1(基本動畫):
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
<div><img src="https://avatar.csdn.net/5/C/8/1_qq_41964425.jpg?1536738841" id="i1" style="width: 400px"></div>
-
<div><button id="but">動畫按鈕</button></div>
-
-
$("#but").on("click", function () {
-
-
{opacity: "toggle"}, 1000);
-
-
-
-
實例2(點贊動畫):
-
-
-
-
<meta http-equiv="content-Type" charset="UTF-8">
-
<meta http-equiv="x-ua-compatible" content="IE=edge">
-
-
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<div id="sign"><button>點贊</button></div>
-
-
$("#sign").on("click", function () {
-
var newI = document.createElement("i");
-
-
-
$(this).children("i").animate({
-
-
-
-
-
-