《jQuery基礎》總結

  目前,互聯網上最好的jQuery入門教材,是Rebecca Murphey寫的《jQuery基礎》(jQuery Fundamentals)。這本書雖然是入門教材,但也足足有100多頁。我對它做了一個詳細的筆記,試圖理清jQuery的設計思想,找出學習的脈絡。我的目標是全面掌握jQuery,遇到問題的時候,心里有底,基本知道使用它的哪一個功能,然后可以迅速從手冊中找到具體的寫法。

一、選擇網頁元素

  jQuery的基本設計思想和主要用法,就是"選擇某個網頁元素,然后對其進行某種操作"。這是它區別于其他Javascript庫的根本特點。

  使用jQuery的第一步,往往就是將一個選擇表達式,放進構造函數jQuery()(簡寫為$),然后得到被選中的元素。

1、選擇表達式可以是CSS選擇器:

$(document) //選擇整個文檔對象
$('#myId') //選擇ID為myId的網頁元素
$('div.myClass') // 選擇class為myClass的div元素
$('input[name=first]') // 選擇name屬性等于first的input元素

2、也可以是jQuery特有的表達式:

$('a:first') //選擇網頁中第一個a元素
$('tr:odd') //選擇表格的奇數行
$('#myForm :input') // 選擇表單中的input元素
$('div:visible') //選擇可見的div元素
$('div:gt(2)') // 選擇所有的div元素,除了前三個
$('div:animated') // 選擇當前處于動畫狀態的div元素

二、改變結果集

  jQuery設計思想之二,就是提供各種強大的過濾器,對結果集進行篩選,縮小選擇結果。

$('div').has('p'); // 選擇包含p元素的div元素
$('div').not('.myClass'); //選擇class不等于myClass的div元素
$('div').filter('.myClass'); //選擇class等于myClass的div元素
$('div').first(); //選擇第1個div元素
$('div').eq(5); //選擇第6個div元素

  有時候,我們需要從結果集出發,移動到附近的相關元素,jQuery也提供了在DOM樹上的移動方法:

$('div').next('p'); //選擇div元素后面的第一個p元素
$('div').parent(); //選擇div元素的父元素
$('div').closest('form'); //選擇離div最近的那個form父元素
$('div').children(); //選擇div的所有子元素
$('div').siblings(); //選擇div的同級元素

三、鏈式操作

  jQuery設計思想之三,就是最終選中網頁元素以后,可以對它進行一系列操作,并且所有操作可以連接在一起,以鏈條的形式寫出來,比如:

$('div').find('h3').eq(2).html('Hello');//分解開來,就是下面這樣:
$('div') //找到div元素.find('h3') //選擇其中的h3元素.eq(2) //選擇第3個h3元素.html('Hello'); //將它的內容改為Hello

  這是jQuery最令人稱道、最方便的特點。它的原理在于每一步的jQuery操作,返回的都是一個jQuery對象,所以不同操作可以連在一起。

  jQuery還提供了.end()方法,使得結果集可以后退一步

$('div').find('h3').eq(2).html('Hello').end() //退回到選中所有的h3元素的那一步.eq(0) //選中第一個h3元素.html('World'); //將它的內容改為World

四、元素的操作:取值和賦值

  操作網頁元素,最常見的需求是取得它們的值,或者對它們進行賦值。

  jQuery設計思想之四,就是使用同一個函數,來完成取值(getter)和賦值(setter),即"取值器"與"賦值器"合一。到底是取值還是賦值,由函數的參數決定。

$('h1').html(); //html()沒有參數,表示取出h1的值
$('h1').html('Hello'); //html()有參數Hello,表示對h1進行賦值

  常見的取值和賦值函數如下:

.html() 取出或設置html內容
.text() 取出或設置text內容
.attr() 取出或設置某個屬性的值
.width() 取出或設置某個元素的寬度
.height() 取出或設置某個元素的高度
.val() 取出某個表單元素的值

  需要注意的是,如果結果集包含多個元素,那么賦值的時候,將對其中所有的元素賦值;取值的時候,則是只取出第一個元素的值(.text()例外,它取出所有元素的text內容)

五、元素的操作:移動

  jQuery設計思想之五,就是提供兩組方法,來操作元素在網頁中的位置移動。一組方法是直接移動該元素,另一組方法是移動其他元素,使得目標元素達到我們想要的位置。

  假定我們選中了一個div元素,需要把它移動到p元素后面。

1、第一種方法是使用.insertAfter(),把div元素移動p元素后面:

$('div').insertAfter($('p'));

2、第二種方法是使用.after(),把p元素加到div元素前面:

$('p').after($('div'));

  表面上看,這兩種方法的效果是一樣的,唯一的不同似乎只是操作視角的不同。但是實際上,它們有一個重大差別,那就是返回的元素不一樣。第一種方法返回div元素,第二種方法返回p元素。你可以根據需要,選擇到底使用哪一種方法。

  使用這種模式的操作方法,一共有四對:

.insertAfter()和.after():在現存元素的外部,從后面插入元素

.insertBefore()和.before():在現存元素的外部,從前面插入元素

.appendTo()和.append():在現存元素的內部,從后面插入元素

.prependTo()和.prepend():在現存元素的內部,從前面插入元素

六、元素的操作:復制、刪除和創建

  除了元素的位置移動之外,jQuery還提供其他幾種操作元素的重要方法。

  復制元素使用.clone()。

  刪除元素使用.remove()和.detach()。兩者的區別在于,前者不保留被刪除元素的事件,后者保留,有利于重新插入文檔時使用。

  清空元素內容(但是不刪除該元素)使用.empty()。

  創建新元素的方法非常簡單,只要把新元素直接傳入jQuery的構造函數就行了:

$('<p>Hello</p>');
$('<li class="new">new list item</li>');
$('ul').append('<li>list item</li>');

七、工具方法

  jQuery設計思想之六:除了對選中的元素進行操作以外,還提供一些與元素無關的工具方法(utility)。不必選中元素,就可以直接使用這些方法。

  如果你懂得Javascript語言的繼承原理,那么就能理解工具方法的實質。它是定義在jQuery構造函數上的方法,即jQuery.method(),所以可以直接使用。而那些操作元素的方法,是定義在構造函數的prototype對象上的方法,即jQuery.prototype.method(),所以必須生成實例(即選中元素)后使用。如果不理解這種區別,問題也不大,只要把工具方法理解成,是像javascript原生函數那樣,可以直接使用的方法就行了。

  常用的工具方法有以下幾種:

$.trim()?去除字符串兩端的空格。

$.each()?遍歷一個數組或對象。

$.inArray()?返回一個值在數組中的索引位置。如果該值不在數組中,則返回-1。

$.grep()?返回數組中符合某種標準的元素。

$.extend()?將多個對象,合并到第一個對象。

$.makeArray()?將對象轉化為數組。

$.type()?判斷對象的類別(函數對象、日期對象、數組對象、正則對象等等)。

$.isArray()?判斷某個參數是否為數組。

$.isEmptyObject()?判斷某個對象是否為空(不含有任何屬性)。

$.isFunction()?判斷某個參數是否為函數。

$.isPlainObject()?判斷某個參數是否為用"{}"或"new Object"建立的對象。

$.support()?判斷瀏覽器是否支持某個特性。

八、事件操作

  jQuery設計思想之七,就是把事件直接綁定在網頁元素之上。目前,jQuery主要支持以下事件:

? ? ? ?.blur()?表單元素失去焦點。

  .change()?表單元素的值發生變化

  .click()?鼠標單擊

  .dblclick()?鼠標雙擊

  .focus()?表單元素獲得焦點

  .focusin()?子元素獲得焦點

  .focusout()?子元素失去焦點

  .hover()?同時為mouseenter和mouseleave事件指定處理函數

  .keydown()?按下鍵盤(長時間按鍵,只返回一個事件)

  .keypress()?按下鍵盤(長時間按鍵,將返回多個事件)

  .keyup()?松開鍵盤

  .load()?元素加載完畢

  .mousedown()?按下鼠標

  .mouseenter()?鼠標進入(進入子元素不觸發)

  .mouseleave()?鼠標離開(離開子元素不觸發)

  .mousemove()?鼠標在元素內部移動

  .mouseout()?鼠標離開(離開子元素也觸發)

  .mouseover()?鼠標進入(進入子元素也觸發)

  .mouseup()?松開鼠標

  .ready()?DOM加載完成

  .resize()?瀏覽器窗口的大小發生改變

  .scroll()?滾動條的位置發生變化

  .select()?用戶選中文本框中的內容

  .submit()?用戶遞交表單

  .toggle()?根據鼠標點擊的次數,依次運行多個函數

  .unload()?用戶離開頁面

  以上這些事件在jQuery內部,都是.bind()的便捷方式。使用.bind()可以更靈活地控制事件,比如為多個事件綁定同一個函數:

    $('input').bind('click change', //同時綁定click和change事件
    function() {alert('Hello');});

  有時,你只想讓事件運行一次,這時可以使用.one()方法。

$("p").one("click", function() {alert("Hello"); //只運行一次,以后的點擊不會運行
});

? ? ? ?.unbind()用來解除事件綁定。

$('p').unbind('click');

  所有的事件處理函數,都可以接受一個事件對象(event object)作為參數,比如下面例子中的e:

$("p").click(function(e) {alert(e.type); // "click"
});

  這個事件對象有一些很有用的屬性和方法:

event.pageX?事件發生時,鼠標距離網頁左上角的水平距離

event.pageY?事件發生時,鼠標距離網頁左上角的垂直距離

event.type?事件的類型(比如click)

event.which?按下了哪一個鍵

event.data?在事件對象上綁定數據,然后傳入事件處理函數

event.target?事件針對的網頁元素

event.preventDefault()?阻止事件的默認行為(比如點擊鏈接,會自動打開新頁面)

event.stopPropagation()?停止事件向上層元素冒泡

  在事件處理函數中,可以用this關鍵字,返回事件針對的DOM元素:

$('a').click(function(e) {if ($(this).attr('href').match('evil')) { //如果確認為有害鏈接e.preventDefault(); //阻止打開$(this).addClass('evil'); //加上表示有害的class
  }
});

  有兩種方法,可以自動觸發一個事件。一種是直接使用事件函數,另一種是使用.trigger()或.triggerHandler()。

  triggerHandler() 方法觸發被選元素的指定事件類型。但不會執行瀏覽器默認動作,也不會產生事件冒泡。triggerHandler() 方法與 trigger() 方法類似。不同的是它不會觸發事件(比如表單提交)的默認行為,而且只影響第一個匹配元素。

  與 trigger() 方法相比的不同之處

  (1)它不會引起事件(比如表單提交)的默認行為

  (2).trigger() 會操作 jQuery 對象匹配的所有元素,而 .triggerHandler() 只影響第一個匹配元素。

  (3)由 .triggerHandler() 創建的事件不會在 DOM 樹中冒泡;如果目標元素不直接處理它們,則不會發生任何事情。

  (4)該方法的返回的是事件處理函數的返回值,而不是具有可鏈性的 jQuery 對象。此外,如果沒有處理程序被觸發,則這個方法返回 undefined。

$('a').click();
$('a').trigger('click');

九、特殊效果

  最后,jQuery允許對象呈現某些特殊效果。常用的特殊效果如下:

  .fadeIn()?淡入

  .fadeOut()?淡出

  .fadeTo()?調整透明度

  .hide()?隱藏元素

  .show()?顯示元素

  .slideDown()?向下展開

  .slideUp()?向上卷起

  .slideToggle()?依次展開或卷起某個元素

  .toggle()?依次展示或隱藏某個元素

  除了.show()和.hide(),所有其他特效的默認執行時間都是400ms(毫秒),但是你可以改變這個設置。

$('h1').fadeIn(300); // 300毫秒內淡入
$('h1').fadeOut('slow'); // 緩慢地淡出

  在特效結束后,可以指定執行某個函數。

$('p').fadeOut(300, function() { $(this).remove(); });

  更復雜的特效,可以用.animate()自定義。

$('div').animate({left : "+=50", //不斷右移opacity : 0.25 //指定透明度
  },300, // 持續時間function() { alert('done!'); } //回調函數
);

? ? ? ??.stop()和.delay()用來停止或延緩特效的執行。

? ? ? ??$.fx.off如果設置為true,則關閉所有網頁特效。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454994.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454994.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

邏輯綜合工具DesignCompiler使用教程

邏輯綜合工具Design Compiler使用教程 圖形界面design vision操作示例 邏輯綜合主要是將HDL語言描述的電路轉換為工藝庫器件構成的網表的過程。綜合工具目前比較主流的是synopsys公司Design Compiler&#xff0c;我們在設計實踐過程中采用這一工具。Design compiler有兩種工作…

遍歷結構體_三菱ST語言編程(3)——結構體變量

上篇文章介紹了數組&#xff0c;是一組相同類型數據的列表&#xff0c;那么不同類型的數據能否組合到一起用一個標簽表示呢&#xff1f;答案當然是可以的&#xff0c;而實現這個功能的就是結構體(struct)。建立結構體在三菱結構化編程的界面中左側程序部件里可以找到結構體標簽…

關于微信小程序swiper的問題

關于小程序swiper的問題 代碼 在官方示例上給swiper添加了currentbindchangecircular添加了一個buttonbindtap用于切換下一張 index.wxml <swiper indicator-dots"{{indicatorDots}}"bindchange"swiperChange"current"{{index}}"circular&quo…

PyQt5案例匯總(完整版)

個人博客點這里 PyQt5案例匯總(完整版) 起步 PyQt5是一套綁定Qt5的應用程序框架。他在Python 2.x和3.x中都是可用的。該教程使用的是Python3.x。 Qt庫是一套最有用的GUI庫。 PyQt5是作為一套Python模塊實現的。他已經超過620個類和6000個函數與方法。他是一個運行在所有主…

中的 隱藏鼠標菜單_Mac移動隱藏刪除頂部菜單欄圖標教程

蘋果菜單欄貫穿 Mac 的屏幕頂部。左側是蘋果菜單和應用菜單&#xff0c;應用菜單一般顯示你當前使用的Mac軟件的所有功能菜單。右側通常是以圖標顯示的狀態菜單&#xff0c;幫助你快速查看Mac的狀態以及快速訪問某些Mac軟件。移動圖標位置若想要重新排列狀態菜單欄的圖標&#…

可以用什么代替平面鏡

答案是鏡面 潛望鏡是利用平面鏡來改變光路轉載于:https://www.cnblogs.com/lidepeng/p/7280593.html

[hadoop] kettle spoon 基礎使用 (txt 內容抽取到excel中)

spoon.bat 啟動kettle。 測試數據 1. 新建轉換 輸入中選擇文本文件輸入 雙擊設置文本輸入 字符集、分隔符設置 獲取對應的字段&#xff0c;預覽記錄。 拖入 excel輸出&#xff0c;設置轉換關系 設置輸出路徑 獲取字段 啟動轉換 導入的excel數據&#xff08;設置好格式,圖中ID,A…

ffmpeg提取音頻播放器總結

ffmpeg提取音頻播放器總結&#xff1b; 一&#xff1a;簡介 從編寫音頻播放器代碼到完成播放器編寫&#xff0c;測試&#xff0c;整整5天的時間&#xff0c;這時間還不算之前對 ffmpeg熟悉的時間&#xff0c;可以說是歷經千辛萬苦&#xff0c;終于搞出來了&#xff0c;雖然最…

【BZOJ 4103】 [Thu Summer Camp 2015]異或運算 可持久化01Trie

我們觀察數據&#xff1a;樹套樹 PASS 主席樹 PASS 一層一個Trie PASS 再看&#xff0c;異或&#xff01;我們就把目光暫時定在01Tire然后我們發現&#xff0c;我們可以帶著一堆點在01Trie上行走&#xff0c;因為O(n*q*30m*30)是一個可選復雜度。 我們想一下我們正常的時候…

Docker學習筆記——Java及Tomcat Dockerfile

1、Java Dockerfile創建項目目錄java&#xff0c;目錄下上傳所需java版本壓縮包&#xff0c;并創建Dockerfile文件&#xff0c;項目結構如下&#xff1a;java-Dockerfile-jdk-8u111-linux-x64.gzDockerfile內容&#xff1a;# JAVA # Version 1.8.0_111 # SOURCE_IMAGE FROM cen…

rabbitmq接口異常函數方法_RabbitMQ監控(三):監控隊列狀態

#RabbitMQ 監控(三)驗證RabbitMQ健康運行只是確保消息通信架構可靠性的一部分&#xff0c;同時&#xff0c;你也需要確保消息通信結構配置沒有遭受意外修改&#xff0c;從而避免應用消息丟失。RabbitMQ Management HTTP API提供了一個方法允許你查看任何vhost上的任何隊列&…

FFMpeg語法參數中文參考手冊

要查看你的ff mpeg支持哪些 格式&#xff0c;可以用如下命令&#xff1a;$ ffmpeg -formats | less還可以把 視頻文件導出成jpg序列幀&#xff1a;$ ffmpeg -i bc-cinematic-en.avi example.%d.jpgdebian下安裝ffmpeg很簡單&#xff1a;&#xff03;apt-get install ffmpegffmp…

Java類集框架 —— LinkedHashMap源碼分析

前言 我們知道HashMap底層是采用數組單向線性鏈表/紅黑樹來實現的&#xff0c;HashMap在擴容或者鏈表與紅黑樹轉換過程時可能會改變元素的位置和順序。如果需要保存元素存入或訪問的先后順序&#xff0c;那就需要采用LinkedHashMap了。 LinkedHashMap結構 LinkedHashMap繼承自H…

apache 支持.htaccess重寫url

1. httpd.conf 添加&#xff1a; <Directory />Options Indexes FollowSymLinks MultiviewsAllowOverride allRequire all grantedRewriteEngine On</Directory> 開啟&#xff1a; 在phpinfo里找到&#xff1a; 說明開啟成功。 2.httpd-vhosts.conf &#xff08;開…

oom 如何避免 高并發_【高并發】高并發環境下如何防止Tomcat內存溢出?看完我懂了!!...

【高并發】高并發環境下如何防止Tomcat內存溢出&#xff1f;看完我懂了&#xff01;&#xff01;發布時間&#xff1a;2020-04-19 00:47,瀏覽次數&#xff1a;126, 標簽&#xff1a;Tomcat寫在前面隨著系統并發量越來越高&#xff0c;Tomcat所占用的內存就會越來越大&#xff0…

[JSOI2008]最小生成樹計數

OJ題號&#xff1a;  BZOJ1016 題目大意&#xff1a;   給定一個無向帶權圖&#xff0c;求最小生成樹的個數。 思路&#xff1a;   先跑一遍最小生成樹&#xff0c;統計相同權值的邊出現的個數。   易證不同的最小生成樹&#xff0c;它們不同的那一部分邊的權值實際上是…

vuex webpack 配置_vue+webpack切換環境和打包之后服務器配置

import axios from ‘axios‘import store from ‘../store/index‘const rootUrl process.env.API_ROOT//創建axios實例const service axios.create({timeout:30000 //超時時間})//添加request攔截器service.interceptors.request.use(config >{if (Object.keys(config.hea…

redis基本用法學習(C#調用FreeRedis操作redis)

FreeRedis屬于常用的基于.net的redis客戶端&#xff0c;EasyCaching中也提供適配FreeRedis的包。根據參考文獻4中的說法&#xff0c;FreeRedis和CsRedis算是近親&#xff08;都是GitHub中賬號為2881099下的開源項目&#xff09;&#xff0c;因此其用法特別相似。FreeRedis的主要…

opencv:圖像的基本變換

0.概述 圖像變換的基本原理都是找到原圖和目標圖的像素位置的映射關系&#xff0c;這個可以用坐標系來思考&#xff0c;在opencv中&#xff0c; 圖像的坐標系是從左上角開始(0,0)&#xff0c;向右是x增加方向(cols)&#xff0c;向下時y增加方向(rows)。 普通坐標關系&#xff1…

FFMpeg在Windows環境下的編譯

1&#xff0e;安裝MinGW &#xff08;1&#xff09;下載文件&#xff1a;MinGW-5.1.4.exe&#xff0c; &#xff08;2&#xff09;安裝時選擇下列組件&#xff1a; binutils-2.19.1-mingw32-bin.tar.gz gcc-core-3.4.5-20060117-3.tar.gz gcc-g-3.4.5-20060117-3.tar.gz …