環游JQ歷險記:鋒利與權威筆記(一)

對jq能熟練運用后在回頭發現,曾今的坑其實這兩本書多多少少都能提到,當時知道有這兩本好書,但是自己卻沒看,如今在回首,真的覺得挺好,作為讀書筆記來分享給大家,也是復習總結查漏補缺。本文以JQ來簡寫JQuery,鋒利的jq v1.3 jq權威指南v1.8 主要是由于現在更新太快,這兩個結合講2.0以下的jq應該還算ok,把這兩本經典柔和一下,就我而言覺得初學者學習鋒利的jq是個很好的選擇,對初學者很友好

庫和框架??

JQ是一個JavaScript的類庫,vue、angular這些是框架,

類庫:類庫可以解決一系列常見編程任務,封裝了方法簡便了操作的一個工具集合
框架: 框框嘛。。簡而言之就是大神寫的東西,你要按照他們的規則,約束就能實現相對應的功能,也是一個類庫的集合體

JQ有什么優勢?

本書說道:
JQ強調的理念是寫得少,做的多(write less,do more)這句話簡直是縮影

  • [x] 輕量級 :v3.20 min版:85k
  • [x] 強大的選擇器:利用選擇器可以拿到各種對象
  • [x] 可靠的事件處理機制:處理事件時,在預留退路、循序漸進,和非侵入式的編程思想。
  • [x] 出色的DOM封裝:封裝了方法讓大家能夠簡單的使用
  • [x] 完善的Ajax:在里面做了很多兼容和HMLHttpRequest的處理
  • [x]** 不污染頂級變量** JQ只建立一個JQuery對象,所有函數方法都在這個對象之下,別名:$,可隨時交出控制權,也就是個類庫是用$可以快速讓給別的類庫
  • [x] 出色的瀏覽器兼容性:用JQ從來不用擔心什么火狐用getAttribute才能獲取之類的
  • [x] 隱式迭代: 這個意思就是$('div')它會返回所有的div的集合數組,這樣就可以少去很多循環
  • [x] 行為層與結構層的分離:HTML結構、CSS表現、JavaScript行為 方便維護
  • [x] 豐富的插件庫:遇到問題好多同學第一想到就是找個插件吧(哈哈)
  • [x] 支持鏈式調用:要注意代碼書寫規范,好玩還很炫酷
  • [x] 完善的文檔豐富的插件庫
  • [x] 開源

這也就是為什么JQ久盛不衰的原因了

window.onload 與$(document).ready() 對比(重點:面試??停?/h3>

$(function(){}) 是$(document).ready()簡寫

為什么要有這什么onload 什么ready:如果要寫代碼在頭部,dom還沒被渲染,自然操作不了DOM,想要操作DOM就放在底下或者加這些,大致意思就是等待加載好了之后的意思


兩者對比思維導圖

鏈式操作書寫規范

要好好的利用這個鏈式操作會簡便很多,簡單的原理就是每次操作返回了this然后可以進行下次操作
個人建議不要鏈太長,最好是每鏈一個就換個行,
注意分號的使用

$('.coderlfy').addClass('go')
.click(function(){...})
.hide();

JQ對象??DOM對象??

JQ 對象就是通過JQ包裝DOM對象后產生的對象
DOM對象就是文檔對象模型,可以想象成一棵樹,樹里有很多標簽啥的,可以操作

JQ與DOM對象相互轉換:通過$()這個工廠方法進行封裝成JQ對象,只有JQ才能操作JQ的函數方法

var dx      //這是一個dom對象
var $dx     //這是一個JQ對象
//dom轉JQ
$(dx)
//JQ轉DOM
$dx[0]

JQ和其他庫沖突時該怎么辦??

這個問題曾今筆者被問過,嘎嘎,印象深刻

  1. 通過jq.noConflict() 改名

var $JQ = noConflict();// $被交出控制權。$JQ頂替$

  1. 不想改名怎么辦?還想不沖突?有兩種方法
//第一種
JQuery.noConflict()// 首先,交出控制權
JQuery(fucntion($){
    //內部就能使用$了
})

//第二種 匿名函數
JQuery.noConflict()// 首先,交出控制權
(function($){
    //內部使用$
})(jQuery);


  1. JQ先導入,不想沖突?
    如果是JQ比其他先導入,直接使用jQuery不用交出控制權

可靠的事件處理機制??

在說優點的時候就已經說到了,簡述一下:如果之前用JQ找到的一個對象被刪除了,它在內部會先做一個判斷是否存在,在運行代碼,減少報錯,增加執行效率

JQ選擇器

這個選擇器很多,大家選擇著看

JQ選擇器種類

css樣式有多少,JQ就有多少應用也很簡單

基本選擇器:

選擇器 用法 描述 返回值
標簽選擇器 $('#lfy') 以文檔唯一標識符號作為選擇符 單個元素
類選擇器 $('.lfy') 以文檔元素的class作為選擇符 元素集合
群組選擇器 $('a,h1,div') 多個選擇符操作 元素集合
通配符選擇器 $('*') 全部元素 元素集合

層次選擇器:

選擇器 用法 描述 返回
后代選擇器 $('ul li') 選擇了ul的后代li 元素集合
父子選擇器 $('ul>li') 根據父元素匹配子元素 元素集合
相鄰選擇器 $('a+div') 匹配所有緊接在 a 元素后的相鄰元素 元素集合
兄弟選擇器 $('a~div') 匹配所有緊接在 a 元素后的所有兄弟元素 元素集合

簡單過濾選擇器

選擇器 用法 描述 返回
first() 或者:fires $("li:first") 獲取第一個元素 單個元素
last() 或者:last $("li:last") 獲取最后一個元素 單個元素
:not(selector) $("li:not(.NotClass)") 獲取除了指定的選擇器意外的所有元素 元素集合
:even $("li:even") 獲取所有索引值為偶數的元素,索引號從 0 開始 元素集合
:odd $("li:odd") 獲取所有索引值為基數的元素,索引號從 0 開始 元素集合
:eq(index) $("li:eq(1)") 獲取指定索引值的元素,索引號從 0 開始 單個元素
:gt(index) $("li:eq(1)") 獲取所有大于給定索引值的元素,索引號從 0 開始 元素集合
:lt(index) $("li:lt(1)") 獲取所有小于給定索引值的元素,索引號從 0 開始 元素集合
:header $('a~div') 獲取所有標題類型的元素,如 h1、h2…… 元素集合
:animated $('a~div') 獲取正在執行動畫效果的元素 元素集合

內容過濾選擇器:

選擇器 用法 描述 返回
:contains(text) $("div:contains('A')") 獲取包含給定文本的元素 元素集合
:empty $("div:empty") 獲取所有不包含子元素或者文本的空元素 元素集合
:has(selector) $("div:has(span)") 獲取含有選擇器所匹配的元素 元素集合
:parent $("div:parent") 獲取含有子元素或者文本的元素 元素集合

tip:在 :contains(text) 內容過濾選擇器中,如果是查找字母,則有大小寫的區別

可見性過濾選擇器:

選擇器 用法 描述 返回
:hidden $("div:hidden") 獲取所有不可見元素,或者 type 為 hidden 的元素 元素集合
:visible $("div:visible") 獲取所有的可見元素 元素集合

屬性過濾選擇器:

選擇器 用法 描述 返回
[attribute] $("div[id]") 獲取包含給定屬性的元素 元素集合
[attribute=value] $("div[id = 'lfy']") 獲取等于~ 元素集合
[attribute!=value] $("div[id != 'lfy']") 獲取不等于~ 元素集合
[attribute^=value] $("div[id ^= 'lfy']") 獲取以某個值開頭的屬性 元素集合
[attribute$=value] $("div[id $= 'lfy']") 以~結尾 元素集合
[attribute*=value] $("div[id *= 'lfy']") 獲取包含~ 元素集合
[selector1][selector2][selectorN] $("div[id='divAB'][title*='B']") 獲取滿足多個條件的復合屬性的元素 元素集合

子元素過濾選擇器:

選擇器 用法 描述 返回
:nth-child(eq、even、odd、index) $("li:nth-child(2)") 獲取包含給定屬性的元素 元素集合
:first-child $("li:first-child") 獲取每個父元素下的第一個子元素 元素集合
:last-child $("li:last-child") 獲取每個父元素下的最后一個子元素 元素集合
:only-child $("li:only-child") 獲取每個父元素下的僅有一個子元素 元素集合

表單對象屬性過濾選擇器

選擇器 用法 描述 返回
:enabled $("#form1 input:enabled") 獲取表單中所有屬性為可用的元素 元素集合
:disabled $("#form1 input:disabled") 獲取表單中所有屬性為不可用的元素 元素集合
:checked $("#form1 input:checked") 獲取表單中所有被選中的元素 元素集合
:selected $("select option:selected") 獲取表單中所有被選中 option 的元素 元素集合

表單選擇器

選擇器 用法 描述 返回
:input $("#form1 :input") 獲取所有 input、textarea、select 素 元素集合
:text $("#form1 :text") 獲取所有單行文本框 元素集合
:password $("#form1 :password") 密碼 元素集合
:radio $("#form1 :radio") 獲radio 元素集合
:checkbox $("#form1 :checkbox") 獲取checkbox 元素集合
:submit $("#form1 :submit") 獲取submit 元素集合
:image $("#form1 :image") 獲取image 元素集合
:reset $("#form1 :reset") 獲取reset 元素集合
:button $("#form1 :button") 獲取button 元素集合
:file $("#form1 :file") 獲取file 元素集合
打臉中

在這里想說:知識很重要,但是尊重別人的勞動成果更重要,總結后才發現沒想到寫這些表能這么累,寫了一半,后來選擇了無情的復制,這個表出自《jQuery權威指南(第二版)》我做了點修改,所有的東西都是從《鋒利的jQuery(第二版)》《jQuery權威指南(第二版)》和自己的想法來做的讀書筆記

JQ操作Dom

在原生js中,Dom操作分為三個方面,即DOM Core(核心)、HTML-DOM 和CSS—DOM

//通過鋒利中的例子讓大家了解,這些大家肯定都用過
//DOM Core 
var xx = document.getElementById('coderlfy');//獲取DOM Core 對象
xx.getAttribute('src')//通過DOM Core 獲取屬性

//HTML-DOM
xx.src//就是提供了一些簡明的幾號來描述HTML元素的屬性

//CSS-DOM
xx.style.color = 'red';//通過設置和獲取style對象的各種屬性來進行改變

++ 元素屬性操作 ++:

  1. 獲取元素屬性:通過Attr(name)來進行查找屬性
  2. 設置元素屬性:設置單個屬性:Attr(key,value) 設置多個屬性 attr({key0:value0, key1:value1})
  3. 刪除元素屬性:通過removeAttr(name)

說道這個Attr(),剛學習的時候總是把它和css()搞混,其實Attr就是弄這個元素上的屬性,而css就只設置樣式等等的![](zzzz)//屬性就是標簽上的id/src這些

++獲取和設置元素++:

  1. 獲取和設置元素內容
// 沒參數的時候是獲取,有參數的時候是設置
html()//獲取html內容
text()//獲取文本內容

html()和text() 這個就像是原生中的innerHTML和innerText
html能識別標簽,text不能

++元素樣式操作++:

  1. 直接設置元素樣式值: 通過css()和Attr()用法一樣
  2. 增加元素類別:通過addClass(className className1...) $("html").addClass('coderlfy')
  3. 切換元素 CSS 類別:使用 toggleClass(class)
  4. 刪除元素的css類別:removeClass([class]),可以刪除多個,不加參數就是刪除全部$("html").removeClass("coderlfy");

++頁面元素操作++:

  1. 創建節點
var $div = $("<div>sss</div>");
$("body").append($div)
  1. 內部插入節點

append():每個匹配的元素內追加內容
append(function(index,html){}) index是對象在這個集合中的索引值,html是要插入的html

//這部分本來想用圖片但是畫的太丑了還是用代碼來展示更直觀些

//html
<p>前端水好深 </p>

//JQ
$('p').append('<b>國足都贏了韓國,還不擼起袖子干</b>')
//結果:
<p>前端水好深 <b>國足都贏了韓國,還不擼起袖子干</b></p>

appendTo(): 把所有匹配的元素追加到指定的元素中

//html
<p>coder</p>

//JQ
$('<b>lfy</b>').append('p')
//結果:
<p>coder <b>lfy</b></p>

prepend(): 表示插入目標元素內部前面的
內容

prependTo(): 和appendTo()一樣啊

prependTo(function(index, html){})

//這部分本來想用圖片但是畫的太丑了還是用代碼來展示更直觀些

//html
<p>和append使用方式一樣 </p>

//JQ
$('p').prepend('<b>一樣的使用方式</b>')
//結果:
<p><b>一樣的使用方式</b> 和append使用方式一樣 </p>
  1. 內部插入節點

after():在有每個匹配的元素之后插入內容

//html
<p> 外部插入</p>
//JQ 
$('p').after('<b>外部</b>')
//結果
<p>外部插入</p><b>外部</b>

insertAfter():將所有匹配的的元素插入到指定的元素后面

//html
<p> 外部插入</p>
//JQ 
$('<b>外部</b>').insertAfter('p')
//結果
<p>外部插入</p><b>外部</b>

before():在每個匹配的元素之前插入內容

//html
<p> 外部插入</p>
//JQ 
$('p').before('<b>外部</b>')
//結果
<b>外部</b><p>外部插入</p>

insertBefore():將所有匹配的的元素插入到指定的元素前面

//html
<p> 外部插入</p>
//JQ 
$('<b>外部</b>').insertBefore('p')
//結果
<b>外部</b><p>外部插入</p>
  1. 復制元素節點

clone();無參數是復制dom元素,參數為true時時把就可以復制元素的所有事件處理

4.替換元素節點

replaceWith(content)----該方法的功能是將所有選擇的元素替換成指定的 HTML 或 DOM 元素,其中參數
content 為被所選擇元素替換的內容

//html
<p>111</p>
//JQ
$('p').replaceWith('<b>替換</b>')
//結果
<b>替換</b>

replaceAll(selector)---該方法的功能是將所有選擇的元素替換成指定 selector 的元素,其中參數 selector 為需要
被替換的元素

//html
<p>111</p>
//JQ
$('<b>替換</b>').replaceAll('p');
//結果
<b>替換</b>

5.包裹元素節點

wrap(html/elem/fn);參數為html:字符串代碼,用與生成元素并包裹所選元素

unwrap():無參數,移除所選元素的父元素或包裹標記

//html 
<strong>包裹</strong>
//JQ
$('strong').wrap('<b></b>')
//結果
<b><strong>包裹</strong></b>

wrapAll(html/elem/fn):把所有選擇的元素用單個元素包裹起來

//html 
<strong>包裹</strong>
<strong>包裹</strong>
//JQ
$('strong').wrapAll('<b></b>')
//結果
<b>
    <strong>包裹</strong>
    <strong>包裹</strong>
</b>

wrapInner(html/elem/fn):把所有選擇的元素的子內容 ( 包括文本節點 ) 用
字符串代碼包裹起來

//html 
<strong>包裹</strong>
//JQ
$('strong').wrapInner('<b></b>')
//結果
<strong><b>包裹</b></strong>
  1. 遍歷元素

each(callback) 回調函數可以接受一個形參 index,從零開始

$('li').each(function(index){...});
  1. 遍歷節點

children() 取得匹配元素的子元素集合

next() 取得匹配元素后面緊鄰的同輩元素

prev() 取得匹配元素前面緊鄰的同輩元素

sibling() 取得匹配元素前后所有同輩元素

closest() 取得最近的匹配元素。首先檢查當前元素是否匹配,如果匹配則直接返回元素本身,如果不匹配則向上查找父元素,逐級向上直到找到匹配選擇器的元素,如果什么都沒有則返回一個空的JQ對象(簡單講就是找最近的匹配的父級)

  1. JQ的 CSS-DOM 操作

css() height()有參數設置無參數獲取高度 width()

offset() 無參數,獲取元素在當前視窗的相對偏移,返回對象top和left,他只對課件元素有效

var offset = $('div').offset; // divoffset
var left = offset.left; // 獲取左偏移
var top = offset.top; // 獲取右偏移

position() 無參數,作用是獲取元素相對與最近的一個position樣式屬性設置為relative 或者absolute的祖父節點的相對偏移,和offset一樣返回也是top和left用法一樣

scrollTop()和scrollLeft有參數是設置滾動條到指定位置------- 兩個方法的作用分別是獲取元素的滾動條距頂端的距離和距左側的距離。

$('textarea').scrollTop(300);//元素的垂直滾動條滾動到指定位置
$('textarea').scrollLeft(300);//元素的水平滾動條滾動到指定位置
The End

天哪,總結好累啊,感覺好像后沒啥但是知識點也好多,學習前端要抱著禿頭的精神去學習?。?!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容

  • 第一章 入門 基本功能:訪問和操作 dom 元素,控制頁面樣式,對頁面的事件處理,與ajax完美結合,有豐富的插件...
    X_Arts閱讀 1,062評論 0 2
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,780評論 1 92
  • 1.幾種基本數據類型?復雜數據類型?值類型和引用數據類型?堆棧數據結構? 基本數據類型:Undefined、Nul...
    極樂君閱讀 5,560評論 0 106
  • 那時我們有夢, 關于文學, 關于愛情, 關于穿越世界的旅行。 如今我們深夜飲酒, 杯子碰到一起, 都是夢破碎的聲音...
    大象熊貓閱讀 1,421評論 56 27
  • 當下互聯網的時代,網購已成為日常生活的一部分,據商務部統計的最新數據顯示:2016年,我國網絡零售交易額達5.16...
    ebbb71f834dc閱讀 212評論 1 3