jQuery介绍

  

  1. jQuery是一个轻量级的、兼容多浏览器的JavaScript库。
  2. jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“

            jQuery优势

  1. 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
  2. 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
  3. 链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
  4. 事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
  5. Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
  6. 跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
  7. 插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。

              jQuery内容

    1. 选择器         2.筛选器     3 .样式操作      4.文本操作      5.属性操作
  1. 6.文档处理      7.事件         8.动画效果       9.插件            10.each,data, Ajax

              jQuery对象

      

jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里的方法:例如$(“#i1”).html()。

$("#i1").html()的意思是:获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。

相当于: document.getElementById("i1").innerHTML;

虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。

一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$

                       

jQuery基础语法

                                $(selector).action()

var $variable = jQuery对像
var variable = DOM对象
$variable[0]//jQuery对象转成DOM对象

  

$("#i1").html();//jQuery对象可以使用j
jQuery对象和DOM对象的使用:
Query的方法 $("#i1")[0].innerHTML;// DOM对象使用DOM的方法

  

  

          一.寻找元素(选择器和筛选器)

a.选择器:

1.基本选择器:    

1 $("*")  $("#id")   $(".class")  $("element")  $(".class,p,div")

2.层级选择器 :

$(".outer div")  $(".outer>div")   $(".outer+div")  $(".outer~div")

3..基本筛选器:

$("li:first")  $("li:eq(2)")  $("li:even") $("li:gt(1)") 

4.属性选择器 :

$('[id="div1"]')   $('["alex="sb"][id]')

  

5.表单选择器

$("[type='text']")----->$(":text")
#注意只适用于input标签  : $("input:checked")

 使用方法:

script>$("li").css("color","red");   #数组
$("li:first").css("color","red");      #第一个$("li:last").css("color","red");        #第二个
$("li:eq(2)").css("color","red");       #查找索引
$("li:even").css("color","red");      #基数行
$("li:odd").css("color","red");        #偶数行
$("li:gt(1)").css("color","red");       #大于某个数
$("li:lt(2)").css("color","red");       #小于某个数</script>
</body>
</html>

基本选择器 演示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body><p alex="sb">1111</p>
<p alex="sb">1111</p>
<p alex="sb" id="p4">1111</p><script src="jquery-3.2.1.js"></script><script>$("[alex]").css("color","red")      #都变红
$("[alex='sb']").css("color","red")     #都变红
$("[alex='sb'][id='p4']").css("color","red")    #最后一个变红</script>
</body>
</html>

属性选择器 演示

!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body><input type="text">
<input type="checkbox">
<input type="submit"><script src="jquery-3.2.1.js"></script><script>$("[type='text']").css("width","300px");$(":text").css("width","300px");     #简写</script>
</body>
</html>

表单选择器 演示

 b.筛选器:

1.过滤筛选器 :

$("li").eq(2)  $("li").first()  $("ul li").hasclass("test")

2.查找筛选器:

      $("div").find(".test") 

下一个元素:$(".test").next()            $(".test").nextAll()                 $(".test").nextUntil()    

上一个元素:$("div").prev()          $("div").prevAll()           $("div").prevUntil()  
 

父亲元素

 $(".test").parent()      $(".test").parents()         $(".test").parentUntil()
  儿子和兄弟元素:                     
 $("div").siblings()    $("#id").children();// 儿子们
   
  

$("#id").find()// 搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。

示例:左侧菜单:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>左侧菜单示例</title><style>.left {position: fixed;left: 0;top: 0;width: 20%;height: 100%;background-color: rgb(47, 53, 61);}.right {width: 80%;height: 100%;}.menu {color: white;}.title {text-align: center;padding: 10px 15px;border-bottom: 1px solid #23282e;
    }.items {background-color: #181c20;
}.item {padding: 5px 10px;border-bottom: 1px solid #23282e;
    }.hide {display: none;}</style>
</head>
<body><div class="left"><div class="menu"><div class="title">菜单一</div><div class="items"><div class="item">111</div><div class="item">222</div><div class="item">333</div></div><div class="title">菜单二</div><div class="items hide"><div class="item">111</div><div class="item">222</div><div class="item">333</div></div><div class="title">菜单三</div><div class="items hide"><div class="item">111</div><div class="item">222</div><div class="item">333</div></div></div>
</div>
<div class="right"></div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><script>$(".title").click(function (){  // jQuery绑定事件// 隐藏所有class里有.items的标签$(".items").addClass("hide");  //批量操作$(this).next().removeClass("hide");});
</script>

View

empty remove 演示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body><div class="c1"><p>ppp</p></div><button>button</button><script src="jquery-3.2.1.js"></script><script>$("button").click(function () {$("p").empty()})</script></body>
</html>

View Code

clone input标签 演示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body><div class="outer"><div class="iterm"><button οnclick="add(this)">+</button><input type="text"></div></div>    <script src="jquery-3.2.1.js"></script><script>function add(self) {var $clone_obj=$(self).parent().clone();$clone_obj.children("button").text("-");$clone_obj.children("button").attr("onclick","remove_obj(this)");$(".outer").append($clone_obj);}function remove_obj(self) {$(self).parent().remove()}</script></body>
</html>

View Code

                          

    样式操作

样式类

addClass();// 添加指定的CSS类名。
removeClass();// 移除指定的CSS类名。
hasClass();// 判断样式存不存在
toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。

CSS:
css("color","red")//DOM操作:tag.style.color="red"

 示例:

$("p").css("color", "red"); //将所有p标签的字体设置为红色

 位置:

offset()//获取匹配元素在当前窗口的相对偏移或设置元素位置
position()//获取匹配元素相对父元素的偏移
scrollTop()//获取匹配元素相对滚动条顶部的偏移
scrollLeft()//获取匹配元素相对滚动条左侧的偏移

.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。

和 .position()的差别在于: .position()是相对于相对于父级元素的位移。

 

    文本操作

HTML代码:

html()// 取得第一个匹配元素的html内容
html(val)// 设置所有匹配元素的html内容

文本值:

text()//取得所有匹配元素的内容
text(val)//设置所有匹配元素的内容

值:

val()// 取得第一个匹配元素的当前值
val(val)// 设置所有匹配元素的值
val([val1, val2])// 设置checkbox、select的值

示例:

获取被选中的checkbox或radio的值:

<label for="c1">女</label>
<input name="gender" id="c1" type="radio" value="0">
<label for="c2">男</label>
<input name="gender" id="c2" type="radio" value="1">  

 创建一个使用例子:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>jQuery val示例</title>
</head>
<body><label for="s1">城市</label>
<select id="s1"><option value="beijing">北京市</option><option value="shanghai">上海市</option><option selected value="guangzhou">广州市</option><option value="shenzhen">深圳市</option>
</select>
<hr>
<label for="s2">爱好</label>
<select id="s2" multiple="multiple"><option value="basketball" selected>篮球</option><option value="football">足球</option><option value="doublecolorball" selected>双色球</option>
</select><script src="jquery-3.2.1.min.js"></script>
<script>// 单选下拉框$("#s1").val("shanghai");// 多选下拉框$("#s2").val(["basketball", "football"]);
</script>
</body>
</html>

jQuery val()值使用

                    二.操作元素(属性,css,文档处理)

属性操作

用于ID等或自定义属性:

 1 #--------------------------属性
 2 $("").attr();                  #新建属性  查看属性  修改属性  自己定义的属性
 3 $("").removeAttr();       #删除这个Attr属性
 4 $("").prop();           #固有的属性
 5 $("").removeProp();
 6 #--------------------------CSS类
 7 $("").addClass(class|fn)
 8 $("").removeClass([class|fn])
 9 #--------------------------HTML代码/文本/值
10 $("").html([val|fn])
11 $("").text([val|fn])
12 $("").val([val|fn|arr])        #取固有属性,input标签
13 #---------------------------
14 $("").css("color","red") 

attr的演示:

主代码:

<div class="div1" con="c1"></div><script src="jquery-3.2.1.js"></script>
<script>console.log($("div").attr("con"))  #查看属性的值$("div").attr("con","c2")           #修改属性$("div").attr("alex","c2")          #新建属性

  

  

prot演示示例: 

prop() // 获取属性
removeProp() // 移除属性
<input type="checkbox" checked="checked">是否可见
<input type="checkbox" >是否可见<script src="jquery-3.2.1.js"></script>
<script>console.log($(":checkbox:first").prop("checked")) //打印当前上面的内容    console.log($(":checkbox:last").prop("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>

    

  /

注意:

在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>

示例:全选、反选、取消

文档处理

添加到指定元素内部的后面

$(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的前面

移除和清空元素

remove()// 从DOM中删除所有匹配的元素。
empty()// 删除匹配的元素集合中所有的子节点。

例子:

点击按钮在表格添加一行数据。

点击每一行的删除按钮删除当前行数据。

替换

replaceWith()
replaceAll()

克隆

clone()// 参数

克隆示例:

 点击复制按钮

事件

常用事件

click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})

keydown和keyup事件组合示例:

 按住shift键批量操作

hover事件示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>hover示例</title><style>* {margin: 0;padding: 0;}.nav {height: 40px;width: 100%;background-color: #3d3d3d;position: fixed;top: 0;}.nav ul {list-style-type: none;line-height: 40px;}.nav li {float: left;padding: 0 10px;color: #999999;position: relative;}.nav li:hover {background-color: #0f0f0f;color: white;}.clearfix:after {content: "";display: block;clear: both;}.son {position: absolute;top: 40px;right: 0;height: 50px;width: 100px;background-color: #00a9ff;display: none;}.hover .son {display: block;}</style>
</head>
<body>
<div class="nav"><ul class="clearfix"><li>登录</li><li>注册</li><li>购物车<p class="son hide">空空如也...</p></li></ul>
</div>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
$(".nav li").hover(function () {$(this).addClass("hover");},function () {$(this).removeClass("hover");}
);
</script>
</body>
</html>

实时监听input输入值变化示例:

 input值变化事件

事件绑定

  1. .on( events [, selector ],function(){})
  • events: 事件
  • selector: 选择器(可选的)
  • function: 事件处理函数

移除事件

  1. .off( events [, selector ][,function(){}])

off() 方法移除用 .on()绑定的事件处理程序。

  • events: 事件
  • selector: 选择器(可选的)
  • function: 事件处理函数

阻止后续事件执行

  1. return false; // 常见阻止表单提交等

注意:

像click、keydown等DOM中定义的事件,我们都可以使用`.on()`方法来绑定事件,但是`hover`这种jQuery中定义的事件就不能用`.on()`方法来绑定了。

想使用事件委托的方式绑定hover事件处理函数,可以参照如下代码分两步绑定事件:

$('ul').on('mouseenter', 'li', function() {//绑定鼠标进入事件$(this).addClass('hover');
});
$('ul').on('mouseleave', 'li', function() {//绑定鼠标划出事件$(this).removeClass('hover');
});

页面载入

当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。

两种的代码:

$(document).ready(function(){
// 在这里写你的JS代码...
})

简写:

$(function(){
// 你在这里写你的代码
})

文档加载完绑定事件,并且阻止默认事件发生:

 登录校验示例

事件委托

事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。

示例:

表格中每一行的编辑和删除按钮都能触发相应的事件。

##这是一个委托事件找到table大表格中的input 中带有delete样式类的进行绑定点击事件
$("table").on("click", "input.delete", function () { ##把body标签中的tr变量追加到tr新建的标签中$("tbody").append(trEle);
#找到当前点击事件的上级的上级后进行删除事件
$(this).parent().parent().remove();  

$("table").on("click", ".delete", function () {// 删除按钮绑定的事件
})

动画效果

// 基本
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])

自定义动画示例:

 点赞特效简单示例

补充

each

jQuery.each(collection, callback(indexInArray, valueOfElement)):

循环:

描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组。数组和类似数组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从0到length - 1。其他对象通过其属性名进行迭代。

方法一》

<script>arrs=[11,22,33];arrs={"name":"egon","age":18}$.each(arrs,function (i,j) {console.log(i);console.log(j);})</script>  

li =[10,20,30,40]
$.each(li,function(i, v){console.log(i, v);//index是索引,ele是每次循环的具体元素。
})

输出:

010
120
230
340

.each(function(index, Element)):

描述:遍历一个jQuery对象,为每个匹配元素执行一个函数。

.each() 方法用来迭代jQuery对象中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数)。由于回调函数是在当前DOM元素为上下文的语境中触发的,所以关键字 this 总是指向这个元素。

// 为每一个li标签添加foo
$("li").each(function(){$(this).addClass("c1");
});

注意: jQuery的方法返回一个jQuery对象,遍历jQuery集合中的元素 - 被称为隐式迭代的过程。当这种情况发生时,它通常不需要显式地循环的 .each()方法:

也就是说,上面的例子没有必要使用each()方法,直接像下面这样写就可以了:

$("li").addClass("c1");  // 对所有标签做统一操作

注意:

在遍历过程中可以使用 return false提前结束each循环。

终止each循环

return false;

伏笔...

.data()

在匹配的元素集合中的所有元素上存储任意相关数据或返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。

.data(key, value):

描述:在匹配的元素上存储任意相关数据。

$("div").data("k",100);//给所有div标签都保存一个名为k,值为100

.data(key):

描述: 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值—通过 .data(name, value)或 HTML5 data-*属性设置。

$("div").data("k");//返回第一个div标签中保存的"k"的值

.removeData(key):

描述:移除存放在元素上的数据,不加key参数表示移除所有保存的数据。

$("div").removeData("k");  //移除元素上存放k对应的数据

示例:

模态框编辑的数据回填表格

插件(了解即可)

jQuery.extend(object)

jQuery的命名空间下添加新的功能。多用于插件开发者向 jQuery 中添加新函数时使用。

示例:

<script>
jQuery.extend({min:function(a, b){return a < b ? a : b;},max:function(a, b){return a > b ? a : b;}
});
jQuery.min(2,3);// => 2
jQuery.max(4,5);// => 5
</script>

jQuery.fn.extend(object)

一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法。

<script>jQuery.fn.extend({check:function(){return this.each(function(){this.checked =true;});},uncheck:function(){return this.each(function(){this.checked =false;});}});
// jQuery对象可以使用新添加的check()方法了。
$("input[type='checkbox']").check();
</script>

单独写在文件中的扩展:

(function(jq){jq.extend({funcName:function(){...},});
})(jQuery);

例子:

自定义的jQuery登录验证插件

 HTML文件
 JS文件

传参版插件:

 HTML文件
 JS文件

课后习题:

  1. 登录+验证
  2. 左侧菜单
  3. 表格-增、删、改、查
好文要顶 已关注 收藏该文  

Q1mi
关注 - 25
粉丝 - 131

我在关注他 取消关注

2
0

« 上一篇:Python连接MySQL数据库之pymysql模块使用
» 下一篇:Bootstrap框架

posted @ 2018-01-02 21:00 Q1mi 阅读(1419) 评论(0) 编辑 收藏

转载于:https://www.cnblogs.com/jsp0/p/8891339.html

jQuery入门学习相关推荐

  1. JQuery入门学习教程

    JQuery学习 文章目录 JQuery学习 1.简介 2.入门 2.1 下载 2.2 使用 2.3 核心对象 3.选择器 3.1 基础选择器 3.2 层次选择器 3.2.1 后代选择器 3.2.2 ...

  2. Jquery入门学习第三篇

    1. 使用基本动画函数 基本的动画函数主要分为show, hide和toggle三个. 都提供了无参数的版本, 表示不适用动画切换元素的显示状态: $("#divPop").sho ...

  3. Jquery基础学习之-入门

    最近段时间在阅读Jquery基础教程, 本文主要总结Jquery学习开发环境的建立. 使用的开发工具:Dreamweaver .Nodpad++; 使用Jquery版本:jquery-1.10.2   ...

  4. JQuery入门手册(学习笔记整理)

    JQuery入门手册 基础 学习重点 技术介绍 jQuery使用 jQuery对象与DOM对象的区别 jQuery对象与DOM对象转换 选择器 选择器语法 基本选择器 层级选择器 input标签选择器 ...

  5. 前端学习——jQuery入门篇

    一. jQuery入门 1.1 初步感受jQuery 使用jquery简单写个tab切换小案例 <!DOCTYPE html> <html lang="en"&g ...

  6. python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...

  7. Java入门学习注意事项有哪些?

    想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...

  8. Jquery入门详解

    JQuery 入门介绍 1.JQuery概述:Jquery是继prototype之后又一个优秀的Javascrīpt框架.它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器(I ...

  9. jqMobi(App Framework)入门学习(一)

    jqMobi(App Framework)入门学习(一) 1. 什么是jqMobi? jqMobi是由appMobi针对HTML5浏览器和移动设备开发的javascript框架.是个极其高速的查询选择 ...

最新文章

  1. linux 系统性能指标采样脚本
  2. spring boot构建基础版web项目(一)springboot、thymeleaf控制层基础构
  3. php和python写爬虫-python和php哪个更适合写爬虫
  4. 如何构建可视化的营销数据大屏?
  5. 某银行省级数据中心IT运维服务体系建设完整思路
  6. Vue009_过渡动画
  7. CentOS6.5卸载默认安装的mysql5.1,并安装mysql5.5(亲测有效)
  8. 如何使用phpMQTT连接阿里云微服务消息队列for IoT
  9. 浅谈数据中心白盒交换机开发
  10. 判断一个点是否在多边形区域内
  11. php绕过验证码注册,验证码被绕过的处理方法_PHP教程
  12. 天天模拟器显示获取服务器失败,天天模拟器FAQ、天天模拟器常见问题快速帮助...
  13. 学计算机程序ui设计,学习UI设计需要什么样的电脑配置
  14. 简要描述服务器虚拟化四大特性,虚拟化的四大特性
  15. chrome浏览器糟糕WEBGL遇到了问题,如何解决
  16. 有感,一些与自己同龄的文字
  17. opencv对相似图片一键找不同。(嘻嘻,找不同小游戏作弊神器)
  18. 智能驾驶汽车之自动泊车发展阶段
  19. 「技术架构」10个提升应用程序性能的倚天剑和屠龙刀
  20. 自信人生二百年,会当水击三千里!

热门文章

  1. Python 技术篇-基于随机数的uuid码的生成
  2. PyQt5 技巧篇-参数控制窗体右上角只显示关闭按钮实例演示
  3. CTFshow php特性 web106
  4. poj 3045 Cow Acrobats (贪心!!不是二分,)
  5. webchart= php 解码,Web Pages - Chart 帮助器
  6. 【ubuntu perf安装】The program 'perf' is currently not installed.
  7. 1.2.2 Logistic回归和梯度下降计算的数学流程
  8. yxy和志愿者小姐姐番外篇之大宝宝123追番记(补题,淘汰赛)
  9. mysql 修改时间段内_详解mysql数据库MyISAM存储引擎如何转为Innodb及其中的注意点...
  10. Flutter之Decoration(边框、圆角、阴影、形状、渐变、背景图像等)