iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Modern Web

連我阿公都會-手把手教你架網站 系列 第 12

【Day12】讓網頁動起來(2)元老級插件jQuery!

  • 分享至 

  • xImage
  •  

上一篇中,我們淺談了JavaScript的基礎,但想要更加深入JS的領域,光有基礎的概念是遠遠不夠的。因此,本篇將為您借紹JS中的最受歡迎的元老級插件 ── jQuery!

jQuery 是什麼?


jQuery是一套可跨越不同瀏覽器的JS函式庫,它能夠簡化HTML和JS之間的操作。

除此之外,jQuery的語法能夠簡化我們對於文件(document)和選擇文件物件模型(DOM)的操作,還能為您的網頁添上動畫、處理事件、甚至是開發Ajax程式。

jQuery更提供了讓工程師建立外掛程式的能力 ── 這使得開發人員能夠直接與使用者互動,還能將主題化的組件進行抽象化。有調查顯示,在全球前10,000個訪問最高的網站中,有65%使用了jQuery,可見jQuery函式庫的強大。

如何引入jQuery?


  • 方法一:
  1. 進入jQuery官網 ⇒ https://jquery.com/ ,點擊download。
    https://ithelp.ithome.com.tw/upload/images/20230927/20160488Xfyh9JQUQf.png

  2. 接著便會來到這個頁面,點選下方的紅字區。
    https://ithelp.ithome.com.tw/upload/images/20230927/20160488N6QDMefNh5.png

  3. 進入下方一串代碼的頁面後,點擊右鍵並另存新檔。
    https://ithelp.ithome.com.tw/upload/images/20230927/201604884KWQuz6x0z.png

下載完畢後會獲得一個JavaScript File類型的檔案,檔案名稱會隨著版本改變,那這裡是3.7.1版本,檔案名稱為: code.jquery.com_jquery-3.7.1.min.js

把該檔案用標籤引入至HTML文本的:

<script src="code.jquery.com_jquery-3.7.1.min.js"></script>
  • 方法二:
  1. 進入官網,選擇jQuery ⇒ https://cdnjs.com/libraries/jquery

點選 </> 按鈕,便會複製它的script標籤。
https://ithelp.ithome.com.tw/upload/images/20230927/20160488CZvCNferbo.png

  1. 把方才複製的標籤引入至HTML文本的:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

以上,便引入完畢啦。

使用jQuery


在jQuery的基本語法中,是需要添加前綴: 錢字號 $

與CSS選擇器相似,想要對HTML文本中的元件做腳本(script),我們必須在JS文本中使用$(”element”)來選取元件:

const element1 = $(".class");
const element2 = $("#id");
const password = $('input[type="password"]');

選擇完畢後,便可以為該元件賦予腳本了。

以下是最常用也最基本的選擇器:

  • 使用class選擇 ⇒ $(”.className")
  • 使用ID選擇 ⇒ $(”.IdName")

jQuery的用處 & 好處?


引入完畢jQuery後,如果本篇開頭的基礎介紹一然無法讓您理解jQuery的用處 & 好處,接下來我將更詳細的為您介紹:

JS的功能是為HTML文本中的元件賦予動態的腳本屬性,如前頭提到的,與CSS選擇器的概念基本一樣。然而,在沒有引入jQuery前,我們要抓取HTML的元件時,原生的JS程式碼如下:

const element1 = document.querySelector(".class");

非常之冗長,然而,當我們引入jQuery後,我們可以將上面的程式碼簡化,改為:

const element1 = $(".class");

簡化過後的程式碼是不是看著更討喜呢?

至於詳細的使用方法,我們直接來看下方的示範:

「viscose有一個水果籃,籃子裡裝著許多水果:有蘋果、香蕉、葡萄…」

我們先使用HTML將上述的句子列出:

<h1>viscose的水果籃</h1>
<ul class="basket">
	<li>apple</li>
	<li>banana</li>
	<li>grapes</li>
</ul>

https://ithelp.ithome.com.tw/upload/images/20230927/20160488JKeb8zzIz9.png

「…後來viscose又放了一顆榴槤進去她的水果籃…」

如果我們繼續編寫HTML,我們必須添增:<li>durian</li> 至文本裡頭。

那如果viscose又增加了柳橙、芭樂、西瓜…等更多水果呢?

一直更改HTML文本是令人煩躁的,我們可以直接從JS文檔裡下手:

<h1>viscose的水果籃</h1>
<ul class="basket">
<!--容器 -->
</ul>

HTML文本中,只寫了一個空的ul,作為viscose的水果籃。

const fruit = [
    "apple", "banana", "grapes","durian"
];
$(".basket").append("<li>"+fruit[0]+"</li>");
$(".basket").append("<li>"+fruit[1]+"</li>");
$(".basket").append("<li>"+fruit[2]+"</li>");
$(".basket").append("<li>"+fruit[3]+"</li>");
// 寫的簡潔一點
const fruit = [
    "apple", "banana", "grapes","durian"
];
const basket_obj = $(".basket");
// 使用迴圈去load資料
for (let i=0;i<fruit.length;i++) {
    basket_obj.append("<li>"+fruit[i]+"</li>")
}

而在JS文本中,我們宣告各種不同水果作為fruit變數,接著抓取HTML文本中的basket元件,並將不同水果用<li>標籤包覆,最後通通塞進<ul>標籤內。
https://ithelp.ithome.com.tw/upload/images/20230927/2016048870YPq9ahxA.png

這種方法可以快速新增您所需要的資料,無須不斷更改HTML文本裡的內容,說到這裡,不知您是否有大概理解JS的用途呢?

常用的 jQuery函式


  • jQuery HTML / append

除了抓HTML中的文本以外,我們還可以使用jQuery中的 html & append 函式去新增或讀取文本。

  1. jQuery html() - 讀取HTML

在HTML文本中,我們先建立了一個名為”app”的div元件:

<body>
    <div id="app">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>10</li>
        </ul>
    </div>
</body>

而後我們在JS文本中使用const app_element = $("#app"); 將整個名為”app”的div元件抓取,

最後使用console.log(app_element.html()); ,會將div元件裏頭的所有HTML文本印在console內:

 const app_element = $("#app");
 console.log(app_element.html());

https://ithelp.ithome.com.tw/upload/images/20230927/20160488dyiO2MDofF.png

  1. jQuery html("prop content") - 覆寫文本:

我們可以在jQuery html()的函式內傳入想要修改的內容,如此一來,便可以實現直接修改HTML文本的效果:

console.log(app_element.html("hahahah"));
console.log(app_element.html());

https://ithelp.ithome.com.tw/upload/images/20230927/20160488YsvVwprRhl.png

  1. jQuery append("prop content") - 新增文本:

想要在被選取的元件中往下加入文本,可以使用 append 函式:

console.log(app_element.append("hahahaha"));

https://ithelp.ithome.com.tw/upload/images/20230927/20160488UR3zkYiVbt.png

  • jQuery each

在HTML中,class可以被賦予給多個元件,假設同時有多個元件被賦予同樣class值,則當我們在JS內使用 $(".class") 去尋找元件的值時,我們得到的將會是一個串列:

<body>
    <div id="app">
        <ul class="list">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>

        <ul class="list">
            <li>a</li>
            <li>b</li>
            <li>c</li>
            <li>d</li>
            <li>e</li>
        </ul>

        <ul class="list">
            <li>I</li>
            <li>II</li>
            <li>III</li>
            <li>IV</li>
            <li>V</li>
        </ul>
    </div>
</body>
  1. $(".class")
console.log($(".list"));

https://ithelp.ithome.com.tw/upload/images/20230927/20160488BYcnGuFo9X.png

可以看到,我們獲得了每個名為"list"元件的索引、元件…等值。

當然,我們也可以使用for迴圈去load每一個相同class的值:

const list_element = $(".list"); 
for (let i = 0 ; i < list_element.length ; i++) {
    console.log(list_element[i]);
}

https://ithelp.ithome.com.tw/upload/images/20230927/20160488hdrOxsWSnP.png

但jQuery其實有內建的 each() 函式可做使用。

  1. each()

each的傳入值為一函式:其 i 為索引值;v 為jQuery物件。

const list_element = $(".list"); 
list_element.each(function (i,v) {
    console.log(i,v);
})

https://ithelp.ithome.com.tw/upload/images/20230927/20160488SUbZqerRfJ.png

印在console的東西與上方使用了$(".class") 方法的結果相同。

const list = $(".list");
list.each(function (i,v) {
    console.log(i,v);
    console.log($(this).html())
})

https://ithelp.ithome.com.tw/upload/images/20230927/20160488HTeGs7S1Zz.png
有了這個函式,我們便可以對多個重複的元素做處理了。

  • jQuery event

使用者在瀏覽一個網頁時,會與網頁互動是必然,譬如:點擊按鈕、屬標碰到某元見,或提交表單…等動作。

而這些操作都是一個網頁事件,我們可以使用JS這樣撰寫出不同的事件,請看下方範例:

範例 ── 點擊計數器


  • 方法一:

寫一function並代入至button的事件內。

<button onclick="count()">
    click:
<span class="times">0</span>
</button>

我們先編寫HTML文本,上面的程式碼中我們寫了一個button的元件。

接下來會看到我們的文本中多了許多不曾見過的語法,那些是JS衍生到HTML的事件語法,這邊我們使用的是onclick事件。

為此button元件設立了onclick事件,該事件的函式名為count,它可以直接被抓取至JS檔中以撰寫腳本。

又新增一span標籤,其class=”times”,起始值為0,我們接下來將會使用JS將其class抓取,並設置條件:當button被點擊時,span標籤內的0會依照點擊次數而+1。
https://ithelp.ithome.com.tw/upload/images/20230927/20160488qgm9aPPuxN.png

此時我們的button在網頁中長這樣。

接下來我們要撰寫JS文檔:

function count() {
    let origin = $(".times").html();
    $(".times").html(parseInt(origin)+1);
}

在JS文本中我們把count函式抓下來,在裏頭宣告一個名為origin的變數,變數內抓取的是button元件的初始值0(即,class="times”的span標籤)

接著使用 $(".times").html(**"prop content")來覆寫文本,**我們要在括號內寫入能使origin變數+1的代碼,才可將整個 點擊按鈕以增加次數 的事件撰寫完畢。

值得注意的是,為什麼我們要在origin變數外面又包了一層 parseInt()呢?

這是因為,當我們使用 jQuery html() 所取得的值,該資料的型態是 字串 ,如果我們直接**+1**,並 點擊五次 ,所產生的結果會是:
https://ithelp.ithome.com.tw/upload/images/20230927/20160488nzNSzmqKUq.png

所以,我們在此必須使用 parseInt() 將得到的 字串 ⇒ 數字:
https://ithelp.ithome.com.tw/upload/images/20230927/201604881rDrlVSBMp.png

如此一來,這個button元件的事件變撰寫完畢了。

  • 方法二:

使用jQuery click() 函式。

與方法一不同,我們這次在HTML的文本中並沒有使用到JS延伸至HTML的事件語法:

<button class="count">
    click:
<span class="times">0</span>
</button>

在JS文本中,這裡使用的是jQuery的 click() 函式,在撰寫之前我們先定義以下:

  • element:用來存放被點擊的button的物件。
  • origin:用來存放得到的值。(從element取得的值)
let origin, element;
$(".count").click(function (e) {
    e.preventDefault();
		// 取值
    element = $(this).children(".times");
    origin = element.html();
		// 設值
    element.html(parseInt(origin) + 1);
});

宣告完上述兩者後,我們接著要抓取HTML文本中,class=”count”的button元件來撰寫click函式。

  • $(".count").click(function (e)):當button受到點擊事件後,此程式將開始進行。
  • e.preventDefault(); :這一行程式碼,可以阻止網頁內默認的點擊行為,以確保按鈕被點擊不會引發頁面刷新。
  • element = $(this).children(".times"); :此處使用了**$(this)** 代表被點擊的button,接著使用 .children(".times") 來尋找並抓取button元件中class=”times”的span標籤 ****,之後的結果將會儲存在 element 變數中。
  • origin = element.html(); :這一行程式碼會把目前的點擊次數值,儲存在 origin 變數中。

最後我們將 origin 中的字串用parseInt轉化成數字,然後使它+1,再把得到的數字回傳並覆寫。如此一來,每當button被點擊,數字就會+1。


以上,便是今天的jQuery基本教學啦!當然,jQuery中還有各種很酷的函式,感興趣的您不妨上網查詢,也可以去翻翻jQuery Doc,我們明天的篇章見!

jQuery Doc ⇒ https://api.jquery.com/


上一篇
【Day11】讓網頁動起來(1) → Javascript 速成
下一篇
【Day13】讓網頁動起來(3)使用GSAP設計動畫!
系列文
連我阿公都會-手把手教你架網站 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言