1. 程式人生 > >jQuery初識之選擇器、樣式操作和篩選器(模態框和選單示例)

jQuery初識之選擇器、樣式操作和篩選器(模態框和選單示例)

一、jQuery
1、介紹
jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript程式碼庫(或JavaScript框架)。
jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的程式碼,做更多的事情。
它封裝JavaScript常用的功能程式碼,提供一種簡便的JavaScript設計模式,優化HTML文件操作、事件處理、動畫設計和Ajax互動。



2、優勢
    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外掛做出來的效果很炫,並且可以根據自己需要去改寫和封裝外掛,簡單實用。 3、內容 1.選擇器 2.篩選器 3.樣式操作 4.文字操作 5.屬性操作 6.文件處理 7.事件 8.動畫效果 9.外掛 10.each、data、Ajax 小提示: 1.jQuery官網:https://jquery.com/ 2.jQuery中文文件:http://jquery.cuishifeng.cn/ 4、jQuery版本 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的支援。 5、jQuery物件 1.概述 jQuery物件就是通過jQuery包裝DOM物件後產生的物件。jQuery物件是 jQuery獨有的。如果一個物件是 jQuery物件,那麼它就可以使用jQuery裡的方法。 例如: $("#i1").html()的意思是:獲取id值為 i1的元素的html程式碼。其中 html()是jQuery裡的方法。 相當於: document.getElementById("i1").innerHTML; 雖然 jQuery物件是包裝 DOM物件後產生的,但是 jQuery物件無法使用 DOM物件的任何方法,同理 DOM物件也沒不能使用 jQuery裡的方法。 2.約定 一般情況下我們在宣告一個jQuery物件變數的時候在變數名前面加上$: var $variable = jQuery對像 var variable = DOM物件 3.jquery物件和dom物件轉換 3-1、jQuery物件轉成DOM物件:jQuery物件可以通過[index]方法獲得相應的DOM物件。 var $divEle = $("#d1"); //得到jQuery物件 var divEle = $divEle[0]; //轉換成DOM物件 var divEle = $("#d1")[0]; //轉換成DOM物件 jQuery還可以通過.get(index)方法得到相應的DOM物件 var divEle = $divEle.get(0); //轉換成DOM物件 3-2、DOM物件轉成jQuery物件:用$()將DOM物件包裝起來,就能獲得jQuery物件了 var divEle = document.getElementById("d"); //得到DOM物件 var $divEle = $(divEle); //轉成jQuery物件 二、jQuery之查詢標籤 基礎寫法:$(selector).action() 1、基本選擇器 id選擇器:$("#id") class選擇器:$(".className") 標籤選擇器:$("tagName") 配合使用:$("div.c1") // 找到有c1 class類的div標籤 所有元素選擇器:$("*") 組合選擇器:$("#id, .className, tagName") 2、層級選擇器 x和y可以為任意選擇器 $("x y"); // x的所有後代y(子子孫孫) $("x > y"); // x的所有兒子y(兒子) $("x + y") // 找到在x後面的第一個y(毗鄰) $("x ~ y") // 找到x的所有的弟弟y 3、屬性選擇器 [attribute] [attribute=value] // 屬性等於 [attribute!=value] // 屬性不等於 例子:
<input type="text"> <input type="password"> <input type="checkbox"> $("input[type]") // 找到有type屬性的input標籤 $("input[type='checkbox']"); // 找到type屬性等於checkbox的input標籤 $("input[type!='text']"); // 找到type屬性不是text的input標籤 4、基本篩選器 :first // 第一個 :last // 最後一個 :gt(index)// 匹配所有大於給定索引值的元素 :lt(index)// 匹配所有小於給定索引值的元素 :eq(index)// 索引等於index的那個元素 :even // 匹配所有索引值為偶數的元素,從 0 開始計數 :odd // 匹配所有索引值為奇數的元素,從 0 開始計數 :has(元素選擇器) // 選取所有包含一個或多個標籤在其內的標籤(指的是從後代元素找) :not(元素選擇器) // 移除所有滿足not條件的標籤 例1: $("div:has(h1)") // 找到所有後代中有h1標籤的div標籤 $("div:has(.c1)") // 找到所有後代中有c1樣式類的div標籤 $("li:not(.c1)") // 找到所有不包含c1樣式類的li標籤(即沒有c1樣式的li標籤) $("li:not(:has(a))") // 找到所有後代中不含a標籤的li標籤 區別:
$("div:has(h1)"):先找到所有div標籤,然後看div標籤的子子孫孫(後代)中是否有h1標籤,有則符合條件,選擇到的是div標籤
比如:
<div>
    <h1>符合條件</h1>
</div>

<div>
    不符合條件
</div>


$("div:not(.c1)"):先找到所有div標籤,然後看div標籤的class屬性,沒有class="c1"的div標籤才符合條件,選擇到的是div標籤
比如:
<div>
    符合條件
</div> <div class="c1"> 不符合條件 </div>
has和not
 
 

 




例2:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery.js"></script>
</head>
<body>

<ul>
    <li>1</li>
    <li>2</li>
    <li id="l3">3</li>
    <li>4</li>
    <li>5</li>
</ul>

<hr>

<div><p>div>p</p></div>

<div class="c1"><span>div>span</span></div>

<div class="c1">
    <p>
        <span>div>p>span</span>
    </p>
</div>

</body>
</html>
HTML程式碼

詳解:
// 找到ul標籤下的所有子標籤li
$("ul li");

// 找到ul標籤下的第一個子標籤li
$("ul li:first");

// 找到ul標籤下的最後一個子標籤li
$("ul li:last");

// 找到ul標籤下的索引為1的子標籤li
$("ul li:eq(1)");



// 找到第一個li標籤
$("li:first");

// 找到最後一個li標籤
$("li:last");

// 找到索引大於1的li標籤
$("li:gt(1)");

// 找到索引小於1的li標籤
$("li:lt(1)");

// 找到索引等於1的li標籤
$("li:eq(1)");

// 找到索引為偶數的li標籤
$("li:even");

// 找到索引為奇數的li標籤
$("li:odd");





5、表單篩選器(僅用於篩選表單)
1.表單type型別
:text
:password
:file
:radio
:checkbox

:submit
:reset
:button

例如:找到所有的checkbox
用屬性選擇器:$("input[type='checkbox']")

用表單篩選器:$(":checkbox")



2.表單物件屬性:
:enabled
:disabled
:checked
:selected

例如:
<!--HTML程式碼-->
<form action="">
    <input type="checkbox" value="a">
    <input type="checkbox" value="b">
    <input type="radio" value="c">

    <select  id="">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
</form>

找到被選中的複選框
$(":checked");

注意:
    當表單中只有一種選擇按鈕的時候,上面這樣寫是可以的,
    但是表單中同時有複選按鈕(checkbox)、單選按鈕(radio)和下拉框(select)的時候,
    上面這樣寫$(":checked");會把所有選中的標籤都找到,即不分是單選還是複選還是下拉框。
    因此一般要找到被選中的那個標籤,可以指定$("input:checked");是input標籤中選中的按鈕。
    或者$("option:selected");是option標籤中選中的下拉框。




二、篩選器方法
1.下一個元素:
$("#id").next()  // 查詢id的下一個元素(是同級的元素,不是子孫)
$("#id").nextAll()  // 查詢id下面的所有元素
$("#id").nextUntil("#i2")  // 查詢id下面的元素一直找到i2就停止(不包括i2的元素)


2.上一個元素:
$("#id").prev()  // 查詢id的上一個元素
$("#id").prevAll()  // 查詢id上面的所有元素
$("#id").prevUntil("#i2")  // 查詢id上面的元素一直找到i2就停止(不包括i2的元素)



3.父親元素:
$("#id").parent()  // 查詢當前元素的第一個父元素
$("#id").parents()  // 查詢當前元素的所有的父輩元素
$("#id").parentsUntil("body") // 查詢當前元素的所有的父輩元素,一直找到body就停止(不包括body)



4.兒子和兄弟元素:
$("#id").children();// 查詢id的所有兒子
$("#id").siblings();// 查詢id的所有兄弟



5.查詢
搜尋所有與指定表示式匹配的元素。這個函式是找出正在處理的元素的後代元素的好方法。
$("div").find("p")  // find是在子子孫孫中找,在div下找子孫p
等價於$("div p")



6.篩選
篩選出與指定表示式匹配的元素集合。這個方法用於縮小匹配的範圍。用逗號分隔多個表示式。
$("div").filter(".c1")  // filter是從結果中過濾出有c1樣式類的
等價於 $("div.c1")



7.補充(跟篩選器一樣的(是子孫裡面找),不過改寫成了方法而已)
.first() // 獲取匹配的第一個元素
.last()  // 獲取匹配的最後一個元素
.not()   // 從匹配元素的集合中刪除與指定表示式匹配的元素
.has()   // 保留包含特定後代的元素,去掉那些不含有指定後代的元素。
.eq()    // 索引值等於指定值的元素

例如:
$("li:first");  //找到第一個li標籤
等價於
$("li").first();  //找到第一個li標籤



三、綜合例子
例1:自定義模態框,使用jQuery實現彈出和隱藏功能。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>JQ模態框示例</title>
    <style type="text/css">
        .cover {
            position: fixed;
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            background-color: rgba(0, 0, 0, 0.3);
            z-index: 199;
        }

        .model {
            width: 400px;
            height: 300px;
            background-color: white;
            position: fixed;
            top: 50%;
            left: 50%;
            margin-top:-150px;
            margin-left:-200px;
            z-index:1999;
        }

        .hide {
            display:none;
        }

        .close {
            position: absolute;
            right:15px;
            top:15px;
            cursor:pointer;
        }
    </style>

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>

<body>
<div>
    <p>渡遠荊門外,來從楚國遊。</p>
    <p>山隨平野盡,江入大荒流。</p>
    <p>月下飛天鏡,雲生結海樓。</p>
    <p>仍憐故鄉水,萬里送行舟。</p>
</div>

<button type="button" id="login">登入</button>

<!--蓋板-->
<div class="cover hide"></div>

<!--點選登入後彈出的頁面-->
<div class="model hide">
    <form action="">
        <p>
            <label>使用者名稱:
                <input type="text" name="username">
            </label>
        </p>

        <p>
            <label>密碼:
                <input type="password" name="password">
            </label>
        </p>
    </form>
    <!--關閉鍵-->
    <div class="close">x</div>
</div>

<script type="text/javascript">
    $("#login")[0].onclick=function () {
        // 去掉cover和modal的hide樣式類
        $(".cover,.model").removeClass("hide");
    }

    $(".close")[0].onclick=function () {
        // 新增cover和modal的hide樣式類
        $(".cover,.model").addClass('hide');
    }

</script>

</body>
</html>
模態框
 
 


例2、左側選單
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .menu {
            width: 234px;
        }
        .item {
            border-bottom: 1px solid white;
        }
        .title {
            background-color: #2b99ff;
            height: 50px;
            line-height: 50px;
            color: white;
            text-align: center;

        }
        .hide {
            display: none;
        }
    </style>
</head>
<body>

<div class="menu">
    <div class="item">
        <div class="title">選單一</div>
        <div class="body hide">
            <div>內容一</div>
            <div>內容二</div>
            <div>內容三</div>
        </div>
    </div>

    <div class="item">
        <div class="title">選單二</div>
        <div class="body hide">
            <div>內容一</div>
            <div>內容二</div>
            <div>內容三</div>
        </div>
    </div>

    <div class="item">
        <div class="title">選單三</div>
        <div class="body hide">
            <div>內容一</div>
            <div>內容二</div>
            <div>內容三</div>
        </div>
    </div>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
    // 1. 找到所有有title樣式的標籤,給他們繫結點選事件
    var $titleEles = $(".title");
    for (var i=0;i<$titleEles.length;i++){
        $titleEles[i].onclick=function () {
            // 如果被點選要做的事兒
            // 1. 把我這個標籤下面的有body樣式類的標籤 移除hide類
            console.log(this);  // this指的是:觸發事件的當前標籤;
            // 注意this是一個DOM物件
            $(this).next().removeClass('hide');
            // 2. 把其他的title標籤下面的有body樣式類的那個標籤加上hide 類
            $(this).parent().siblings().find('.body').addClass('hide')
        }
    }

</script>
</html>
左側選單