jQuery 實戰讀書筆記之第二章:選擇元素

来源:https://www.cnblogs.com/fxb248/archive/2018/01/22/8331459.html
-Advertisement-
Play Games

基本選擇器 html 代碼如下,後面的 js 使用的 html 基本大同小異。 js 代碼如下: 根據層級查找元素 js 代碼如下: 通過屬性來選擇元素 過濾器 表單過濾器及自定義過濾器 ...


基本選擇器

html 代碼如下,後面的 js 使用的 html 基本大同小異。

<!doctype html>
<html>
    <head>
        <title>基本選擇器</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" href="../css/main.css"/>
        <style>
            .found-element
            {
               border: 2px solid #000000;
               background-color: #DDDDDD;
            }
   
            .red-border
            {
               border: 2px solid #E80C0C;
            }
   
            .opaque
            {
               opacity: 0.5;
            }
         </style>
    </head>
    <body>
        <div id="sample-dom">
         <span>Some images:</span>
         <div>
            <img src="../images/image.1.jpg" id="hibiscus" alt="Hibiscus"/>
            <img src="../images/image.2.jpg" id="little-bear" title="A dog named Little Bear"/>
            <img src="../images/image.3.jpg" id="verbena" alt="Verbena"/>
            <img src="../images/image.4.jpg" id="cozmo" title="A puppy named Cozmo"/>
            <img src="../images/image.5.jpg" id="tiger-lily" alt="Tiger Lily"/>
            <img src="../images/image.6.jpg" id="coffee-pot"/>
         </div>

         <div id="some-div">This is a &lt;div&gt; with an id of <code>some-div</code></div>

         <h2>Hello, I'm a &lt;h2&gt; element</h2>
         <p>
            I'm a paragraph, nice to meet you.
         </p>

         <ul class="my-list">
            <li>
               <a href="http://jquery.com">jQuery website</a>
               <ul>
                  <li><a href="#css1">CSS1</a></li>
                  <li><a href="#css2">CSS2</a></li>
                  <li><a href="#css3">CSS3</a></li>
                  <li>Basic XPath</li>
               </ul>
            </li>
            <li>
               jQuery also supports
               <ul>
                  <li>Custom selectors</li>
                  <li>Form selectors</li>
               </ul>
            </li>
         </ul>

         <table id="languages">
            <thead>
            <tr>
               <th>Language</th>
               <th>Type</th>
               <th>Invented</th>
            </tr>
            </thead>
            <tbody>
            <tr>
               <td>Java</td>
               <td>Static</td>
               <td>1995</td>
            </tr>
            <tr>
               <td>Ruby</td>
               <td>Dynamic</td>
               <td>1993</td>
            </tr>
            <tr>
               <td>Smalltalk</td>
               <td>Dynamic</td>
               <td>1972</td>
            </tr>
            <tr>
               <td>C++</td>
               <td>Static</td>
               <td>1983</td>
            </tr>
            </tbody>
         </table>

         <form id="form-fake" action="#">
            <div>
               <label for="text-field">Text:</label>
               <input type="text" id="text-field" name="text-field"/>
            </div>
            <div>
               <span>Radio group:</span>
               <label><input type="radio" name="radio-group" id="radio-a" value="A"/> A</label>
               <label><input type="radio" name="radio-group" id="radio-b" value="B" checked="checked"/> B</label>
               <label><input type="radio" name="radio-group" id="radio-c" value="C"/> C</label>
            </div>
            <div>
               <span>Checkboxes:</span>
               <label><input type="checkbox" name="checkboxes" id="checkbox-1" value="1"/> 1</label>
               <label><input type="checkbox" name="checkboxes" id="checkbox-2" value="2"/> 2</label>
               <label><input type="checkbox" name="checkboxes" id="checkbox-3" value="3" checked="checked"/> 3</label>
               <label><input type="checkbox" name="checkboxes" id="checkbox-4" value="4"/> 4</label>
            </div>
            <input type="submit" id="button-submit" value="Submit" />
         </form>
      </div>

        <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
        <!-- 如果 CDN 無法訪問,就使用本地文件 -->
        <script>
            window.jQuery || document.write('<script src="../js/jquery-3.2.1.js"><\/script>')
        </script>
        <script src="js/basicSelector.js"></script>
    </body>
</html>

js 代碼如下:

//IE6-7 不支持 console.log() 方法

//通用選擇器
var $allElements = $('*');

console.log('通用選擇器 "*" 結果:');
console.log($allElements);

//ID 選擇器,原生 Javascript 函數 getElementById()
var $idElement = $('#some-div');
console.log('ID 選擇器 "#some-div" 結果:');
console.log($idElement);
//$('\\.description')   圓點符號"." 在 CSS 中有特殊的用法,所以這裡需要使用轉義

//Class 選擇器,原生 Javascript 函數 getElementsByClassName()
var $classElements = $('.my-list');
console.log('Class 選擇器 ".my-list" 結果:');
console.log($classElements);

//元素選擇器,原生 Javascript 函數 getElementsByTagName()
var $divs = $('div');
console.log('元素選擇器 "div" 結果:');
console.log($divs);

//選擇 div 和 span 的所有元素
var $divAndSpan = $('div, span');
console.log('元素選擇器 "div, span" 結果:');
console.log($divAndSpan);

//選擇 div 下的 span 子元素
var $divSpan = $('div span');
console.log('元素選擇器 "div span" 結果:');
console.log($divSpan);

 

根據層級查找元素

js 代碼如下:

//直接子元素
var $aDirectChild = $('ul.my-list > li > a');
console.log('層次選擇器直接子元素 "ul.my-list > li > a" 結果:')
console.log($aDirectChild);

//子元素
var $aChild = $('ul.my-list li a');
console.log('層次選擇器子元素 "ul.my-list li a" 結果:')
console.log($aChild);

//緊鄰同級元素
var $siblingDirect = $('ul+table');
console.log('層次選擇器緊鄰同級 "ul+table" 結果:');
console.log($siblingDirect);

//同級元素
var $siblingNotDirect = $('ul~table');
console.log('層次選擇器同級 "ul~table" 結果:');
console.log($siblingNotDirect);

 

通過屬性來選擇元素

//屬性 href 值以 http:// 開頭
var $externalLinks = $('a[href^="http://"]');
console.log('選擇器 "a[href^=\"http://\"]" 結果:')
console.log($externalLinks);

//屬性 href 值不等於 http://jquery.com
var $externalNotEqualLinks = $('a[href!="http://jquery.com"]');
console.log('選擇器 "a[href^=\"http://jquery.com\"" 結果:')
console.log($externalNotEqualLinks);

/*  不能識別。。。書上講錯了???
//屬性 href 值不以 http:// 開頭
var $notExternalLinks = $('a[href!^="http://"]');
console.log('選擇器 "a[href!^=\"http://\"]" 結果:')
console.log($notExternalLinks);
*/

//屬性 src 值以 .jpg 結尾
var $endMatch = $('[src$=".jpg"');
console.log('選擇器 "[src$=\".jpg\"" 結果:');
console.log($endMatch);

//屬性 href 值包含 jquery
var $includeMatch = $('[href*="jquery.com"]');
console.log('選擇器 "[href*=\"jquery.com\"" 結果:');
console.log($includeMatch);

//屬性 id 包含首碼 tiger (包含 tiger 本身)
var $includePrefixMatch = $('[class|="my"]');
console.log('選擇器 "[class|=\"my\"]" 結果:');
console.log($includePrefixMatch);

//滿足兩個條件
var $doubleMatch = $('input[type="checkbox"][checked]');
console.log('選擇器 "input[type|=\"checkbox\"][checked]" 結果:');
console.log($doubleMatch);

 

過濾器

/*
過濾器是與其他類型的選擇器結合進一步篩選匹配元素結果集的選擇器。
通常以冒號(:)開頭,其中一些選擇器接受括弧內的傳遞參數。
*/


/*
位置過濾器
*/

var $aFisrt = $('a:first');
console.log('頁面第一個a元素選擇器 "a:first" 結果:')
console.log($aFisrt);

var $aLast = $('a:last');
console.log('頁面最後一個a元素選擇器 "a:last" 結果:')
console.log($aLast);

//索引從 0 開始,返回偶數索引元素
var $aEven = $('a:even');
console.log('a偶數元素選擇器 "a:even" 結果:')
console.log($aEven);

//索引從 0 開始,返回奇數索引元素
var $aEven = $('a:odd');
console.log('a奇數選擇器 "a:odd" 結果:')
console.log($aEven);

var $aEqule = $('a:eq(2)');
console.log('a選擇器 "a:eq(2)" 結果:')
console.log($aEqule);

var $aGreaterThan = $('a:gt(2)');
console.log('a選擇器 "a:gt(2)" 結果:')
console.log($aGreaterThan);

var $aLessThan = $('a:lt(2)');
console.log('a選擇器 "a:lt(2)" 結果:')
console.log($aLessThan);


/*
子過濾器
*/
var $firstChild = $('div:first-child');  //查找的是 div 類型標簽,是它的父元素的第一個子元素
console.log('匹配上下文第一個子元素選擇器 "div:first-child" 結果:')
console.log($firstChild);

var $lastChild = $('div:last-child');  //查找的是 div 類型標簽,是它的父元素的最後一個子元素
console.log('匹配上下文最後一個子元素選擇器 "div:last-child" 結果:')
console.log($lastChild);

var $typeFirstChild = $('div:first-of-type');  //查找的是 div 類型標簽,是它的父元素的第一個符合指定類型的子元素
console.log('匹配上下文第一個符合指定類型的子元素選擇器 "div:first-of-type" 結果:')
console.log($typeFirstChild);

var $typeLastChild = $('div:last-of-type');  //查找的是 div 類型標簽,是它的父元素的最後一個符合指定類型的子元素
console.log('匹配上下文最後一個符合指定類型的子元素選擇器 "div:last-of-type" 結果:')
console.log($typeLastChild);

/*
nth-child 索引從 1 開始而不是從 0 開始
*/
/*
查找的是 div 類型標簽,是它的父元素的第二個子元素
*/
var $threeChild = $('div:nth-child(2)');
console.log('匹配上下文第二個子元素選擇器 "div:nth-child(2)" 結果:')
console.log($threeChild);

/*
查找的是 div 類型標簽,是它的父元素的偶數個子元素
*/
var $evenChild = $('div:nth-child(even)');
console.log('匹配上下文偶數個子元素選擇器 "div:nth-child(even)" 結果:')
console.log($evenChild);

var $evenChild = $('div:nth-child(2n + 1)');
console.log('匹配上下文偶數個子元素選擇器 "div:nth-child(2n + 1)" 結果:')
console.log($evenChild);

 

表單過濾器及自定義過濾器

/*
被勾選的覆選框
*/
var checkedCheckBox1 = $('input[type="checkbox"][checked]'); //通過屬性進行匹配的方式只能檢查控制項的初始化狀態值
var checkedCheckBox2 = $('input[type="checkbox"]:checked');  //偽樣式類 :checked 可以匹配被勾選的元素
var checkedCheckBox3 = $('input:checkbox:checked');  // :checkbox 可以標識所有的覆選框元素
console.log('選中的覆選框:"input:checkbox:checked"');
console.log(checkedCheckBox3);

/*
:disabled,  :enabled, :file, :focus, :image, :input, :password, :radio, :reset, :submit, :text
:selected:選取被選擇的 <option> 元素(下拉列表)。
*/

var selectedElement = $('input:selected');
console.log('處於選中狀態的列表元素:"input:selected"');
console.log(selectedElement);


/*
內容過濾器
根據內容並不是說只根據文本內容,也可能是子元素
*/
var $hasDiv = $('div:has(img[src*="1.jpg"])');
console.log('包含 src 中含有 1.jpg 的img 元素的 div 元素:"input:selected"');
console.log($hasDiv);

var $emptyElement = $('input:empty');
console.log('沒有子元素的元素(包括文本):"input:empty"');
console.log($emptyElement);

var $parentElement = $(':parent');
console.log('包含至少有一個子節點的元素(子節點是文本或者元素):":parent"');
console.log($parentElement);

var $containsElement = $('p:contains("nice")');
console.log('包含特定文本的元素(直接包含在文本中的元素,或者被包含在子元素中):"p:contains(\"nice\")"');
console.log($containsElement);

var $containsElement2 = $('ul:contains("CSS1")');
console.log('包含特定文本的元素(直接包含在文本中的元素,或者被包含在子元素中):"ul:contains(\"CSS1\")"');
console.log($containsElement2);


/*
其他過濾器
*/
/*
:not 選擇器
*/
var $notElement = $('img:not(img[src$="1.jpg"])');
console.log('src 不是 1.jpg 結尾的 img 元素:"img:not(img[src$=\"1.jpg\"])');
console.log($notElement);

/*
:visible, :hidden, :root, :target, :lang(language)
*/

/*
:header   <h1> - <h6>
*/
var $headerElement = $(':header');
console.log('頭元素:":header');
console.log($headerElement);



/*
自定義過濾器
*/
$.expr[':'].requiredLevel = $.expr.createPseudo(function(filterParam){
    return function(element, context, isXml){
        return element.getAttribute('data-level') > 2 &&
            element.getAttribute('data-points') > 100;
    };
});

$.expr[':'].pointsHigerThan = $.expr.createPseudo(function(filterParam){
    var points = parseInt(filterParam, 10);
    return function(element, context, isXml){
        return element.getAttribute('data-points') > points;
    }
});

var $higerElement = $('ul.levels li:pointsHigerThan(50)');
console.log('自定義選擇器: ul.levels li:pointsHigerThan(50)');
console.log($higerElement);

/*
使用上下文增強性能
給 $() 函數傳遞第二個參數 context,這個參數根據使用的選擇器來限制篩選 DOM 子元素的範圍,這個參數在頁面有大量元素的情況下
非常有用,當忽略該參數時,預設為整個 document
*/
var $spansInDiv = $('span', 'div'); //等同於 $('div span')
console.log('增加了選擇上下文的選擇器: "span", "div"');
console.log($spansInDiv);

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.先在github上創建一個git倉庫。 README文件可以先不加,等代碼上傳到github後再加 這是創建後的樣子 2.打開終端 找到項目文件夾,cd 到所在文件 3. 初始化git git init 4. 添加到git git add . (註意:add後面又有個空格) 5. 添加到臨時倉庫 ...
  • app在運行過程中,需要保存用戶的一些信息。例如登錄狀態、賬戶信息等,安卓提供了多種方式來保存用戶的數據。 1.key-value 保存,通過SharedPreferences實現 SharedPreferences sp = getSharedPreferences("test", Context ...
  • 這段時間在搞電子書,把這些天出現的問題歸總下,我還是希望電子書的格式包括返回的數據,可直觀的反應出客戶端想表達的內容;原生的體驗還是比較好的,希望對coretext再深入。 1.判斷點擊的位置是否在某個NSRange範圍內 2.通過CFRange與CTFrameRef獲取要操作(塗色,劃線)的CGR ...
  • 寫在前面 在我們操作頁面跳轉時,如果當前的類不是UIViewcontroller(下麵用VC表示),你會不會寫一個代理,或者block給VC傳遞信息,然後在VC裡面進行 拿tableViewCell做例子,如果每個頁面展示的tableViewCell中,如果存在不少的這樣操作,就會寫很多代理或者bl ...
  • 事務是一些列的資料庫操作,是資料庫應用程式的基本邏輯單位。事務處理技術主要包括併發控制技術和資料庫恢復技術。併發控制和資料庫恢復機制是資料庫管理系統的重要組成部分,併發控制機制用來控制多個事務的並行運行,避免它們之間的互相干擾,保證每個事務都產生正確的結果。資料庫恢復機制用來進行系統失敗後的恢復處理 ...
  • HTML5 source標簽是一種媒介元素(比如 <video> 和 <audio>)來定義媒介資源。<source> 標簽允許您規定可替換的視頻/音頻文件供瀏覽器根據它對媒體類型或者編解碼器的支持進行選擇。 這裡主機吧給大家講一下source標簽的應用屬性和實例。 <source>標簽屬性: <s ...
  • 去年年底發佈的parcel.js在年底可謂是火了一把,短短一個多月的時間在GitHub熱門排行榜上名列前茅。因其幾乎零配置的易用性,相比Webpack的複雜配置收穫了大量關註及好評,甚至有人預言未來大有超過Webpack之趨。我也趕緊嘗試一下,發現確實非常簡單易用,但是一開始,插件還是比較少,相信未 ...
  • 創建新 HTML 元素 管理 jQuery 集合 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...