--- tags: jQuery,第一章 --- # jQuery第一章 ## JavaScript庫 這些庫都是對原生JavaScript進行封裝 即library,是一個封裝好的特定的集合(方法和函數) 比如jQuery,就是為了快速方便的操作DOM,裡面基本都是函數(方法) ### 常見的JavaScript庫 jQuery Prototype YUI Dojo Ext JS 移動端的zepto ### jQuery優點 1.輕量級,核心文件才幾10KB 2.跨瀏覽器兼容 3.鏈式編程、隱式疊代 4.對事件、樣式、動畫支持 5.支持插件擴展開發 6.免費開源 ### $ $是jQuery的別稱 $也是jQuery的頂級對象 ## 使用jQuery https://jquery.com/ 生產環節用,有壓縮 Download the compressed, production jQuery 3.6.3 開發者版本 Download the uncompressed, development jQuery 3.6.3 ```javascript= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> <style> div { width: 200px; height: 200px; background-color: pink; } </style> </head> <body> <div></div> <script> $("div").hide(); </script> </body> </html> ``` ## onload效果 又稱入口函數 相當於DOMContentLoaded ```javascript= <script> $(document).ready(function () { // 寫內容 }); </script> ``` ```javascript= <script> $(function () { // 寫內容 }); </script> ``` ## 2種對象 ```javascript= <div></div> <script> // DOM對象 var myDiv = document.querySelector('div'); console.dir(myDiv); // jQuery對象,偽數組 $('div'); console.dir($('div')); // 報錯寫法 myDiv.style.display = 'none'; // myDiv.hide(); // $('div').style.display = 'none'; $('div').hide(); </script> ``` ## 2種對象互換 ```javascript= <video src="480p.mp4" muted controls></video> <script> // DOM轉jQuery var myVideo = document.querySelector('video'); // $(myVideo).play(); // jQuery轉DOM $('video')[0].play(); $('video').get(0).play(); </script> ``` ## 基礎選擇器 ![](https://i.imgur.com/OajaFhn.jpg) ![](https://i.imgur.com/CkncY8G.jpg) ```html= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> </head> <body> <div>我是div</div> <div class="nav">我是nav</div> <p>我是p</p> <ol> <li>我是ol的</li> <li>我是ol的</li> <li>我是ol的</li> <li>我是ol的</li> </ol> <ul> <li>我是ul的</li> <li>我是ul的</li> <li>我是ul的</li> <li>我是ul的</li> </ul> <script> console.log($('.nav')); console.log($('ul li')); </script> </body> </html> ``` ## 隱式疊代 遍歷內部DOM元素(偽數組形式存儲)的過程叫做隱式疊代 ```html= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> </head> <body> <div>驚不驚喜</div> <div>驚不驚喜</div> <div>驚不驚喜</div> <div>驚不驚喜</div> <ul> <li>相同</li> <li>相同</li> <li>相同</li> </ul> <script> console.log($('div')); // 隱式疊代 $('div').css('background', 'pink'); $('ul li').css('color', 'red'); </script> </body> </html> ``` ## 篩選選擇器 ![](https://i.imgur.com/YrFaQar.jpg) ```html= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> </head> <body> <ul> <li>篩選</li> <li>篩選</li> <li>篩選</li> <li>篩選</li> <li>篩選</li> <li>篩選</li> </ul> <ol> <li>篩選</li> <li>篩選</li> <li>篩選</li> <li>篩選</li> <li>篩選</li> <li>篩選</li> </ol> <script> $('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'); </script> </body> </html> ``` ## 篩選方法 ![](https://i.imgur.com/U67TxWA.jpg) ```html= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> </head> <body> <div class="yeye"> <div class="father"> <div class="son">兒子</div> </div> </div> <div class="nav"> <p>我是屁</p> <div> <p>我是p</p> </div> </div> <script> // 返回最近一級的父級元素 console.log($('.son').parent()); // 只選親兒子 $('.nav').children('p').css('color', 'red'); // 選所有的孩子,包含兒子和孫子 $('.nav').find('p').css('color', 'blue'); </script> </body> </html> ``` ## 新浪下拉菜單 ```html= <!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.0" /> <title>Document</title> <style> /* 全體樣式 */ a { text-decoration: none; } li { list-style: none; } /* 全體樣式 */ /* 最外框 */ .nav { display: flex; justify-content: center; align-items: center; margin: 0 auto; /* width: 1000px; */ height: 2000px; background-color: pink; } /* 最外框 */ /* 標題格子 */ .nav > li { float: left; border: 2px solid black; border-right: none; width: 200px; height: 200px; background-color: yellow; text-align: center; line-height: 200px; } .nav > li:nth-last-child(1) { border-right: 2px solid black; } .nav > li > a { display: inline-block; width: 200px; height: 200px; font-size: 100px; } .nav > li > a:hover { background-color: #eee; } /* 標題格子 */ /* 下拉菜單母體 */ .menu { display: none; position: relative; top: -28px; left: -42px; width: 200px; height: 200px; } /* 下拉菜單母體 */ /* 下拉菜單小格子 */ .menu li { border: 2px solid black; border-bottom: none; width: 200px; height: 200px; background-color: green; } .menu li:nth-last-child(1) { border-bottom: 2px solid black; } .menu li a { display: inline-block; width: 200px; height: 200px; font-size: 100px; } .menu li a:hover { background-color: #fff; } /* 下拉菜單小格子 */ </style> <script src="jQuery.min.js"></script> </head> <body> <ul class="nav"> <li> <a href="#">微博</a> <ul class="menu"> <li><a href="">私信</a></li> <li><a href="">評論</a></li> <li><a href="">我的</a></li> </ul> </li> <li> <a href="#">微博</a> <ul class="menu"> <li><a href="">私信</a></li> <li><a href="">評論</a></li> <li><a href="">我的</a></li> </ul> </li> <li> <a href="#">微博</a> <ul class="menu"> <li><a href="">私信</a></li> <li><a href="">評論</a></li> <li><a href="">我的</a></li> </ul> </li> </ul> </body> <script> $('.nav>li').mouseover(function () { $(this).children('ul').show(); }); $('.nav>li').mouseout(function () { $(this).children('ul').hide(); }); </script> </html> ``` ## 更多篩選方法 ```html= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> </head> <body> <ol> <li>我是ol的li</li> <li>我是ol的li</li> <li class="item">我是ol的li</li> <li>我是ol的li</li> <li>我是ol的li</li> <li>我是ol的li</li> </ol> <ul> <li>我是ul的li</li> <li>我是ul的li</li> <li>我是ul的li</li> <li>我是ul的li</li> <li>我是ul的li</li> <li>我是ul的li</li> </ul> <div class="current">我有current</div> <div>沒東東</div> <script> // 兄弟元素,自身之外所有元素 $('ol .item').siblings('li').css('color', 'red'); // 第n個元素寫法一 $('ul li:eq(2)').css('color', 'blue'); // 第n個元素寫法二,也可代入變量 $('ul li').eq(3).css('color', 'green'); // 判斷有沒有類名 console.log($('div:first').hasClass('current')); //true console.log($('div:last').hasClass('current')); //false </script> </body> </html> ``` ## 排他思想 ```javascript= <!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.0" /> <title>Document</title> <script src="jQuery.min.js"></script> </head> <body> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <script> // 1.隱式疊代 $('button').click(function () { // 2.當前元素換背景 $(this).css('background', 'pink'); // 3.其餘兄弟去顏色 $(this).siblings('button').css('background', ''); }); </script> </body> </html> ``` ## 案例:JQuery側邊導航欄 [demo網站](https://hackmd.io/a-KWROXGTimx5KrbsjAlUQ) [JQuery側邊導航欄](https://github.com/bahigabu/JQuery_sideNavBar) ![](https://i.imgur.com/XKzZCXx.gif)