jQuery學習筆記(二):this相關問題及選擇器

来源:http://www.cnblogs.com/lianzhibin/archive/2016/11/16/6071738.html
-Advertisement-
Play Games

上一節的遺留問題,關於this的相關問題,先來解決一下。 this的相關問題 this指代的是什麼 這個應該是比較好理解的,this就是指代當前操作的DOM對象。 在jQuery中,this可以用於單個對象,也可以用於多個對象。 jQuery中的this和$(this)有什麼區別 jQuery中的t ...


上一節的遺留問題,關於this的相關問題,先來解決一下。

this的相關問題

this指代的是什麼

這個應該是比較好理解的,this就是指代當前操作的DOM對象。

在jQuery中,this可以用於單個對象,也可以用於多個對象。

複製代碼
$('btn').click(function(){
    alert(this.innerHTML);  // 單個對象,this指代當前id為btn的DOM對象
});

$('div').each(function(index){
    alert(this.innerHTML);  // 多個對象,this指代當前迴圈中索引為index的DOM對象 
});
複製代碼

 

jQuery中的this和$(this)有什麼區別

jQuery中的this和$(this)有什麼區別

$("div").each(function(index){
     alert($(this));  // [object Object] jQuery對象
     alert(this);    // [object HTMLDivElement] DOM對象
});

可以觀察到,this指代的是DOM對象,$(this)指代的是包裝當前DOM對象的jQuery對象。

 

jQuery選擇器

上一節也分析到,jQuery的最大貢獻之一就是方便的獲取DOM元素,並對DOM元素進行操作。

先看幾個簡單的例子:

複製代碼
$('div');  // 選擇所有標簽為div的DOM元素

$('#info');  // 選擇id為info的DOM元素

$('div>p');  // 選擇所有div標簽下的子集標簽為p的DOM元素

$('input[placeholder*="info"]');  // 獲取所有input標簽中,屬性placeholder值中包含info欄位的DOM元素

$('p:odd');  // 獲取所有標簽為p的元素壓入棧中,選擇其中索引值為奇數的DOM元素
複製代碼

可以看到,有多種選擇方式讓你獲取你所需要的對象,這些先作為一個引子,讓我們對jQuery的選擇器有一個大致上的印象。現在以開發者的角度來思考:如何選擇需要的DOM元素。

 

1. 首先能想到的是,獲取指定id的元素,對其進行操作。

$('#info');  // 獲取id為info的元素

 

2. 既然可以獲取指定id的元素,那麼理所應當的,也可以獲取指定class的元素。

$('.info');  // 獲取class為info的元素

 

3. 有時會遇到一系列具有相同className的元素,而這些元素之間沒有辦法互相區分彼此。

複製代碼
<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
      <div class='info'>0</div>
      <div class='info'>1</div>
      <div class='info'>2</div>
      <div class='info'>3</div>
      <div class='info'>4</div>
    </body>
</html>   
複製代碼

 

這時,如果我想獲取這一系列元素中的第一個:

$('.info:first').val();  // 獲取class為info的一系列元素中的第一個元素的值,即0

 

我想獲取這一系列元素中的最後一個:

$('.info:last').val();  // 獲取class為info的一系列元素中的最後一個元素的值,即4

 

那獲取任意一個元素呢?

$('.info:eq(2)').val();  // 獲取class為info的一系列元素中索引為2的元素的值,即2(索引從0開始)

 

看來選擇單個元素還是很方便的,那要是選擇符合某些條件的複數個元素呢?比如選擇這一組元素的後三個元素:

$('.info:gt(1)');  // 獲取class為info的一系列元素中索引大於1的對象,即2,3,4
$('.info:lt(2)');  // 獲取class為info的一系列元素中索引小於2的對象,即0,1

 

選擇系列元素中索引為奇數的元素(好像很少這麼做,但jQuery也為我們提供了選擇器)

$('.info:odd');  // 獲取class為info的一系列元素中索引為奇數(1,3)的對象,即1,3
$('.info:even'); // 獲取class為info的一系列元素中索引為偶數(0,2,4)的對象,即0、2、4

 

4. 比如現在有一系列鏈接元素,但是它們並沒有唯一id標識,也沒有className區分,各個元素之間僅有href是不一致的,該如何選擇需要的元素呢?

複製代碼
<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <div>
          <a>0</a>
          <a href='/info'>1</a>
          <a href='/infomation'>2</a>
          <a href='/test'>3</a>
        </div>
    </body>
</html>   
複製代碼

 

比如我想選擇帶有href屬性的a標簽元素:

$('a[href]');  // 選擇帶有href屬性的a標簽,即1,2,3

 

 選擇href屬性值為info的a標簽元素:

$('a[href="info"]');  // 選擇href屬性為info的a標簽,即1

 

選擇href屬相值已info開頭的a標簽元素:

$('a[href^="info"]');  // 選擇帶有href屬性值已info開頭的a標簽,即1,2

 

選擇href屬性值已tion結尾的a標簽元素:

$('a[href$="tion"]');  // 選擇帶有href屬性值已tion結尾的a標簽,即2

 

選擇href屬性值中有fo欄位的a標簽元素:

$('a[href*="fo"]');  // 選擇帶有href屬性值中包含fo的a標簽,即1,2

 

當然,也可以進行反選,選擇href屬性值中不包含info的a標簽元素:

$('a[href!="info"]');  // 選擇帶有href屬性值中不包含info的a標簽,即3

 

5. 還有會遇到一些情況,要求我們根據DOM元素的內容來選擇合適的元素。

$('div:contains("info")'); // 選擇div標簽中內容包含info欄位的元素

 

6. 現在我們已經通過指定id、class或是指定索引值、屬性值來確定元素,讓我們換個角度,有沒有可能從元素之間的關係來確定元素呢?

先統一名稱:

 

同級元素:即當前元素處於同一層級。

<div>
    <p>0</p>  // 當前兩個標簽為p的元素處於同一層級,屬於同級元素
    <p>1</p>
</div>

父級元素:即當前元素的直屬上層元素。

祖先元素:即當前元素的所有上層元素。

子級元素:即當前元素的直屬子層元素。

後代元素:即當前元素的所有子層元素。

複製代碼
<div id='ancestor'>
    <div id='father'>  // 標簽為p的元素的父級元素是id為father的元素,祖先元素為id為father和ancestor的元素
          <p><span>0</span></p>  // id為father的元素的子級元素是標簽為p的元素,後代元素為標簽p與span的元素  
          <p>1</p>
    </div>
</div>
複製代碼

 

統一好關係名稱之後,再探討元素之間的關係就不會感覺混亂。

 

現在有如下代碼:

複製代碼
<form>
    <label>Name:</label>
    <input name="name" />
    <fieldset>
        <label>Newsletter:</label>
        <input name="firstletter" />
     <input name="secondletter" />
</fieldset> <input name="none" /> </form>
複製代碼

 

選擇標簽為form的所有子級input元素:

$('form>input'); // 選擇標簽為from的元素下的所有標簽為input的子級元素,即name=“name”,name=“none”的元素

 

選擇標簽為form的所有的後代input元素:

$('form input'); // 選擇標簽為from的元素下的所有標簽為input的後代元素,即name=“name”,name=“none”,name=“firstletter”,name=“secondletter”的元素

 

也可以選擇符合條件的同級元素(同級元素中的第一個):

$('label+input'); // 選擇標簽為label的同級元素中,標簽為input的元素中的第一個,即name=“name”,name=“firstletter”的元素

 

也可以選擇所有符合條件的同級元素:

$('label~input'); // 選擇標簽為label的同級元素中,所有標簽為input的元素,即name=“name”,name=“firstletter”,name=“secondletter”,name=“none”的元素

 

選擇後代元素中包含選定元素的元素:

<div>
    <p><span>Hello</span></p>
</div>
<div>Hello again!</div>
$('div:has(span)') // 選擇所有後代元素中包含span元素的div元素

 

以上便是暫時能夠想到的獲取DOM對象的方法,通過閱讀jQuery手冊,發現jQuery也很好的將這些考慮了進去。在下一節中,可以針對jQuery中的選擇器進行總結。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先說明一下,PHP擴展有兩種編譯方式:方式一:在編譯PHP時直接將擴展編譯進去方式二:擴展被編譯成.so文件,在php.ini里配置載入路徑; 以下開始說明創建PHP擴展並編譯的步驟:下載PHP源碼,並解壓,在源碼的根目錄下開始操作,1. 使用ext_skel生成擴展框架,如下: ➜ php-5. ...
  • 碰到個奇葩事啊,一個spring的項目拿到客戶現場部署到resin4中,啟動後各種報無法註入bean,找不到bean的問題.出現大量下圖的錯誤: 除了系統,其他的jdk版本,resin版本,程式包都是在相同測試環境成功部署測試過的,無任何問題.所以想當然的認為可能拿過去的包有問題,馬上本地resin ...
  • ...
  • 1、BootStrap指定的四種屏幕尺寸: ①超大PC屏幕——lg(large):w>=1200px; ②中等PC屏幕——md(medium):1200px>w>=992px; ③Pad屏幕——sm(small):992px>w>=768px; ④Phone屏幕——xs(extra small):7 ...
  • 一款很實用的jQuery滑鼠懸浮有動畫效果的響應式瀑布流插件 線上預覽 下載地址 實例代碼 <!doctype html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" conten ...
  • 前言:最近準備做一個自己的網頁,設計稿中導航我準備設計成矩形,也有hover樣式展示的矩形,當中一些頭像等等。以前除了畫圓,好像真沒認真畫過其他圖形,今天就畫畫我們常見到的幾個圖形。 在此之前我們有必要瞭解下什麼是偽元素(和它不同的,還有一個概念叫偽類,兩者容易混淆),沒有它畫不成圖形的。 a)偽元 ...
  • 2016年9月27日—1.0leaflet,最快的,最穩定和嚴謹的leaflet,終於出來了! leaflet是領先的開源JavaScript庫為移動設備設計的互動地圖。重33 KB的JS,所有映射大多數開發人員所需要的特性。 leaflet設計簡單,性能和可用性。它有效地在所有主要的桌面和移動平臺 ...
  • DOM系列 基礎篇 DOM (Document Object Model) 即文檔對象模型, 針對 HTML 和 XML 文檔的 API (應用程式介面) 。DOM 描繪了一個層次化的節點樹,運行開發人員添加、移除和修改頁面的某一部分。DOM 產生於 網景公司及微軟公司創始的 DHTML(動態 HT ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...