jQuery 實戰讀書筆記之第三章:操作 jQuery 集合

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

創建新 HTML 元素 管理 jQuery 集合 ...


創建新 HTML 元素

$('<div>Hello</div>');

/*
創建等價的空 div 元素
*/
$('<div>');
$('<div />');
$('<div></div>');

/*
創建帶屬性的 圖片元素
*/
$('<img>', 
{
    src: '../images/little.bear.png',
    alt: 'Little Bear',
    title: 'I woof in your general direction',
    click: function(){
        alert($(this).attr('title'));
    }
}).appendTo('body');

 

管理 jQuery 集合

/*
jQuery 允許把 jQuery 集合當做 JavaScript 數組進行處理,所以可以用簡單的數組索引來讀取集合中的元素。
*/
var $imgAlt = $('img[alt]');
console.log('數組長度為:' + $imgAlt.length);
var firstImgAlt = $('img[alt]')[0];  //獲取到的是一個原始的 DOM 元素
console.log('返回第一個元素:');
console.log(firstImgAlt);

/*
使用 get([index]) 方法
*/
var imageElement = $('img[alt]').get(0);  //和上面的用索引讀取的代碼效用一致
/*
使用負數做索引,就會從集合尾部開始計算。-1 查找倒數第一個元素
*/
var lastImageElement = $('img[alt]').get(-1);
console.log('返回最後一個元素:');
console.log(lastImageElement);
/*
沒有索引參數,那麼返回的就是 JavaScript 數組
*/
var imageArray = $('img[alt]').get();
console.log(imageArray);

/*
想獲得一個包含特定元素的 jQuery 對象,而不是原始對象
*/
console.log('獲取同一個特定元素(作為 jQuery 對象而不是原始對象)的三種寫法的結果:');
var $obj1 = $($('img[alt]').get(2));
console.log($obj1 instanceof jQuery);  //判斷是否為 jQuery 對象
console.log($obj1);
var $obj2 = $('img[alt]:eq(2)');
console.log($obj2);
var $obj3 = $('img[alt]').eq(2);  //推薦使用這種方法,使用 eq() 方法的性能比使用 :eq 篩選器的性能高,返回包含一個或多個元素的 jQuery 集合
console.log($obj3);

/*
first() 函數,對比 :first 篩選器
*/
var $firstObj = $('img[alt]').first();
console.log('first() 函數:');
console.log($firstObj);

/*
last() 函數,對比 :last 篩選器
*/
var $lastObj = $('img[alt]').last();
console.log('last() 函數:');
console.log($lastObj);

/*
作為數組返回 DOM 元素的集合
*/
var allPUL = $('p + ul').toArray();  //返回 ul 標簽,且 ul 標簽緊鄰的兄弟節點為 p 標簽
console.log('toArray 返回 DOM 元素數組集合:')
console.log(allPUL);

/*
index() 函數,獲取索引,索引從 0 開始
*/
var index = $('.levels > li').index($('#li2'));
console.log('#li2 的索引是(以對應的 jQuery 對象作為參數): ' + index);
index = $('.levels > li').index(document.getElementById('li2'));
console.log('#li2 的索引是(以對應的 JavaScript 對象作為參數): ' + index);
index = $('.levels > li').index('#li2');
console.log('#li2 的索引是(以對應的 selector 作為參數): ' + index);  //結果為 -1,傳 selector 字元串作為參數不可以嗎???

index = $('#li3').index();
console.log('無參 index() 方法返回的 #li3 的 index:' + index);

index = $('.levels > li[data-level=4]').index();
console.log('無參 index() 方法返回的.leves > li[data-level=4] 的 index:' + index);



/*
使用關係獲取集合
*/
/*
返回集合中所有元素的祖先,既包含直接父節點也包含更高層的祖先節點,但是不包含文檔根節點(document),但選中的祖先節點只會出現一次
*/
var $parents = $('#hibiscus').parents();
console.log('id為 #hibiscus 的所有祖先節點:');
console.log($parents);

/*
通過 parents(selector) 對返回的祖先節點進行篩選
*/
$parents = $('#hibiscus').parents('div');
console.log('id為 #hibiscus 的所有祖先節點且節點標簽為 div:');
console.log($parents);

/*
返回集合中所有元素的直接父節點元素,重覆的父節點元素只返回一次
*/
var $parent = $('img, li').parent();
console.log('"img, li" 的父元素:');
console.log($parent);

/*
返回集合中所有元素的子元素,參數 selector 可以用於篩選
返回的是直接子元素
*/
var $bodyChildren = $('body').children();
console.log('body 的所有子元素,不包括文本節點:')
console.log($bodyChildren);

/*
children() 方法不返迴文本節點,要處理文本節點使用 contents() 方法,參數 selector 可以用於篩選
*/
var $bodyContent = $('body').contents();
console.log('body 的所有子元素,包括文本節點:')
console.log($bodyContent);

/*
搜索遍歷集合中的所有元素的子節點(深度優先演算法)
*/
var $set = $('#sample-dom').find('[title]');
console.log('find() 方法深度優先搜索:');
console.log($set);

/*
返回集合中的直接兄弟節點
如果是最後一個節點,那麼返回的集合長度為0
*/
var $nextImg = $('#hibiscus').next();
console.log('next() 方法返回集合中的直接兄弟節點:');
console.log($nextImg);

var $nextAllImg = $('#hibiscus').nextAll();
console.log('nextAll() 方法返回集合中的所有兄弟節點:');
console.log($nextAllImg);

/*
返回集合中的前直接兄弟節點
如果是第一個節點,那麼返回的集合長度為0
*/
var $prevImg = $('#cozmo').prev();
console.log('prev() 方法返回集合中的前直接兄弟節點:');
console.log($prevImg);

/*
返回的集合可以註意下順序,是從下往上
*/
var $prevAllImg = $('#cozmo').prevAll();
console.log('prevAll() 方法返回集合中的前所有兄弟節點:');
console.log($prevAllImg);

/*
返回集合中元素的兄弟節點
*/
var $siblings = $('#cozmo').siblings();
console.log($siblings);


/*
集合中添加新元素
add(selector[, context]): selector 參數可以是包含選擇器的字元串、HTML 片段、DOM 元素、DOM 元素數組或者 jQuery 對象
*/
$('img[alt]').addClass('red-border').add('img[title]').addClass('opaque');

/*
刪除集合元素
使用 not() 方法鏈式調用選擇器來剔除某些元素
not(selector):創建不包含選擇器 selecotr 參數匹配元素的新集合,註意這裡是把符合條件的篩選去掉了
*/
var $not = $('img[title]').not('[title*="puppy"]');  //等同的單個選擇器  img[title]:not([title*='puppy'])
console.log('not 方法:');
console.log($not);

/*
not() 方法中傳入函數,用於複雜的或者無法用單個選擇器表達式描述的情況
符合函數條件的會被篩選掉
*/
var $notWithFunction = $('div').not(function(index){
    return $(this).children().length > 2 && index % 2 === 0;
});
console.log('not() 方法中傳入函數:');
console.log($notWithFunction);


/*
filter(selector) 方法和 not(selector) 方法相反,符合條件的會被篩選出來
*/
var $filtered = $('td').filter(function(){
    return this.innerHTML.match(/^\d+$/);
});
console.log('filter() 方法返回只包含純數字的 td :');
console.log($filtered);

/* slice(start[, end]) start:首元素位置為0 end:返回元素的最後位置,如果為負數,則表示偏移從末尾開始 */ var $slice = $('*').slice(0, 4); console.log('slice() 方法獲取前4個元素:'); console.log($slice);
/* has(selector) 測試所有 jQuery 集合中的子元素,返回只包含匹配 selector 選擇器的子元素的新集合 */ var $has = $('div').has('img[alt]'); console.log('has() 方法返回匹配 selector 選擇器的子元素的新集合:'); console.log($has);
/* map(callback) 需要轉換集合的元素,根據一個集合計算出另一個集合 在集合中的每個元素上調用 callback 函數,然後返回值到一個 jQuery 對象中 函數傳遞兩個參數,第一個是集合中元素的索引,第二個是元素本身,元素本身作為函數的上下文(this) */ var $allIds = $('div').map(function(){ return this.id; }); console.log('map() 方法得到元素的 id 的集合:'); console.log($allIds);
/* each(iterator) 遍歷集合中的所有元素,為每個元素調用 iterator 函數 函數傳遞兩個參數,第一個是集合中元素的索引,第二個是元素本身,元素本身作為函數的上下文(this) 返回的集合是原來的 jQuery 集合 */ var $imgAlts = $('img').each(function(i){ this.alt = 'This is image[' + i + '] with an id of ' + this.id; }); console.log('each() 方法修改 img 元素的 alt:'); console.log($imgAlts);
/* is(selector) 確定集合中是否有元素匹配給定的選擇器 有匹配的返回 true,沒有返回 false */ var hasImage = $('*').is('img'); console.log('is() 方法判斷全文元素中是否包含 img 元素:'); console.log(hasImage);
/* end() 在 jQuery 鏈式調用中使用該方法,在當前調用鏈中結束最近的過濾操作,然後返回匹配元素的集合到之前的狀態 jQuery 對象維護了一個內部棧來保存針對匹配元素集合的修改 */ $('img').filter('[title]').hide().end().addClass('my-class');
/* addBack([selector]) 把棧上前一個元素集合的元素添加到當前集合里 */ $('div').addClass('my-class').find('img').addClass('red-border').addBack().addClass('opaque');
 

 


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

-Advertisement-
Play Games
更多相關文章
  • 本文出自:http://blog.csdn.net/harvic880925/article/details/40660137 源碼地址:http://download.csdn.net/detail/harvic880925/8111357 一、概述 EventBus是一款針對Android優化的 ...
  • 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之趨。我也趕緊嘗試一下,發現確實非常簡單易用,但是一開始,插件還是比較少,相信未 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...