jQuery原始碼學習---簡單dom封裝(一)
封裝簡易的dom操作。
一、解決名稱空間和變數汙染
1.作用域
2.立即執行函式
3.閉包
jQuery是一個類陣列物件,裡面有各種方法,當然jQuery的dom選擇器是sizzle很牛叉,據瞭解還有更快的dom選擇器,實力上去再探索。jQuery使用無new建構函式,可以直接使用$().xx
(function(window){ var wdjs=function(selector){ return new wdjs.fn.init(selector);//返回wdjs原型鏈init屬性的例項 } wdjs.fn=wdjs.prototype={ init:function(selector){ return this;//返回指標作用域 } } wdjs.fn.init.prototype=wdjs.fn;//將wdjs.prototype原型繫結到init.prototype原型,實現init例項就是wdjs例項 window.wdjs=window.$=wdjs;//註冊全域性變數$ })(window)
具體的個人說不清楚,直接搞搞簡單的dom選擇器,完成個人目標。
二、dom選擇器
1.id
2.類(class)
3.屬性名(input:[''])
4.標籤(a div p)
由於dom選擇器有些龐大,個人還未學會正則表示式,所以並未使用querySeletor和querySeletorAll來獲取節點,簡單搞搞。
(function(window){ var wdjs=function(selector){ return new wdjs.fn.init(selector);//返回wdjs原型鏈init屬性的例項 } wdjs.fn=wdjs.prototype={ init:function(selector){ var doc=document; //消除字串頭尾空白字元 String.prototype.trim=function(){ //用replace消除空白字元 return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');//直接使用trim()不相容IE } //IE9-不支援陣列的indexOf if(!Array.prototype.indexOf){ //新增陣列原型indexOf屬性 Array.prototype.indexOf=function(value){ for(var i=0,len=this.length;i<len;i++){ if(this[i]==value){ return i; } } return -1; } } if(selector.trim().split(' ').length>1){ //字串拼接,用空格分割成陣列 //複合選擇器 }else{ //單項選擇器,呼叫javascript內部原生dom選擇 var type=selector.trim().charAt(0);//返回第一個字元 switch(type){ case '.': //類選擇器,IE不相容getElementsByClassName方法 var classes=[]; if(doc.getElementsByClassName){ return doc.getElementsByClassName(selector.slice(1,selector.length)); }else{ var node=doc.getElementsByTagName('*'); for(var i=0;i<node.length;i++){ var cla=node[i].className.split(/\s+/);//類名 if(cla.indexOf(selector.slice(1))!=-1){//如果存在節點 classes.push(node[i]); } } return classes; } break; case '#': //id選擇器 return doc.getElementById(selector.slice(1,selector.length)); break; case '[': //屬性選擇器 break; default ://tag標籤選擇器 return doc.getElementsByTagName(selector); } } return this;//返回指標作用域 } } wdjs.fn.init.prototype=wdjs.fn;//將wdjs.prototype原型繫結到init.prototype原型,實現init例項就是wdjs例項 window.wdjs=window.$=wdjs;//註冊全域性變數$ })(window)
實現id,類,標籤,屬性名沒有,也沒有實現多級查詢,如$('#id .class')等等。裡面程式碼優化什麼的都沒有,後期學習中再考慮。
單項獲取節點,類選擇返回陣列,標籤返回類陣列。
接下來學習內容,正則表示式,ajax封裝等等js基礎。
相關推薦
jQuery原始碼學習---簡單dom封裝(一)
封裝簡易的dom操作。 一、解決名稱空間和變數汙染 1.作用域 2.立即執行函式 3.閉包 jQuery是一個類陣列物件,裡面有各種方法,當然jQuery的dom選擇器是sizzle很牛叉,據瞭解還有更快的dom選擇器,實力上去再探索。jQuery使用無new建構函式,可以
Java併發包原始碼學習之AQS框架(一)概述
AQS其實就是java.util.concurrent.locks.AbstractQueuedSynchronizer這個類。 閱讀Java的併發包原始碼你會發現這個類是整個java.util.concurrent的核心之一,也可以說是閱讀整個併發包原始碼的一個突破口。 比如讀ReentrantLock的
Golang原始碼學習:排程邏輯(一)初始化
本文所使用的Golang為1.14,dlv為1.4.0。 ### 原始碼 ``` package main import "fmt" func main() { fmt.Println("Hello") } ``` ### 開始除錯 ``` root@xiamin:~/study# dlv debug
Java學習之路0714(一)(markDown標籤的簡單使用,Java環境配置、Java基本資料型別))
1、markdown標籤的簡單使用 #的使用 *的使用 >的使用 =的使用 -的使用 圖片的新增 標題#的使用,#表示一級標題,##表示是二級標題,標題內容寫在#後面 這是一級標題 這是二級標題 這是三級標題
從零開始學習區塊鏈技術(一)--從原始碼編譯比特幣
寫在開始之前,為什麼你一定要學習區塊鏈技術? 技術的變革和迭代一直在飛速發展中,作為有著15年程式開發經驗的我,常常在思考現在的我們到底改如何做,到底應該學習些什麼,才能跟上新的時代變革,保持自身的競爭力,並且能為這個世界帶來更好的改變呢? 答案是,學習
Retrofit+Rxjava 網路請求的簡單封裝(一)(觀察者模式)
我通過公司一個上線App介面來進行Retrofit+Rxjava 的簡單學習 http://x-phone.cn/api/v1.0/DeletePrivateContact 當然你直接訪問上面的url是無法獲取伺服器Json資料的,因為是需要封裝請求體,
學習 RTOS -- 認識 RTOS 和最簡單的 OS(一)
1、什麼是RTOS? 所謂的 RTOS (Real time operation system)指的就是實時的作業系統。如何理解這一句話呢?那麼就要首先知道什麼是系統,在日常的生活中我們常常會聽到系統這個詞,比如有windows作業系統,Android作業
“笨辦法學python”學習筆記-在終端powershell中對目錄進行簡單的編輯(一)
1.new-item -path c:/ -name 新建資料夾或檔案的名字 -type directory 意思是在C盤新建一個資料夾 new-item: 新建專案 -path:指定路徑 -name:檔案或資料夾的名字 -type directory:型別目錄,也就是資料夾,
Javascript基礎簡單匯總(一):元素獲取
問題 元素節點 all push 傳說 length [] nbsp 文檔 在頁面腳本中,如果要對頁面元素進行操作,那麽我們就要獲取到這個元素 那麽在獲取元素之前首先得要了解什麽是DOM(document object model) 在DOM,元素是以節點的形式表示的,每
使用Struts2和jQuery EasyUI實現簡單CRUD系統(五)——jsp,json,EasyUI的結合
元素 word cli resultset sheet 傳輸 charset {} tco 這部分比較復雜,之前看過自己的同學開發一個選課系統的時候用到了JSON,可是一直不知道有什麽用。寫東西也沒用到。所以沒去學他。然後如今以這樣的懷著好奇心,這是做什麽用的,這是怎麽用
DOM 基礎(一)
引號 nod pro 操作符 結果 所有組 數組 tag 方式 DOM(document object model)由節點構成,元素節點,文本節點,屬性節點是一份DOM的所有組成。 <p id="p">this is a node</p>
監督式學習 -- 分類決策樹(一)
cte 求解 分支 基本概念 tracking 它的 解決 mat 這就是 決策樹(decision tree)是一種基本的分類與回歸方法。其表示的樹型結構,能夠覺得是if-else規則的集合。基本的長處是分類可讀性好,速度快。一般會有三個步驟:特征選擇、決策樹的生成
統計學習基本理論知識(一)
求解 兩個 向量 定義 標準差 註意 begin lan 語言模型 本篇將依據《統計自然語言處理》(宗成慶),重新梳理統計學習相關理論知識,相關概率論與梳理統計的課本不再列出來,可以找任意相關的課本復(預)習。 概率 概率是表示事件發生的可能性,將隨機試驗中的事件映射到實數
C# SQL封裝(一)
c# sql封裝(一)感謝軟謀徐老師的SQLHelper.as , 代碼如下(本人有所改動):using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using
UESTC 1697 簡單GCD問題(一) 篩法
ans input 所有 枚舉 miss space 輸出 data- ios 簡單GCD問題(一) Time Limit: 1500/500MS (Java/Others) Memory Limit: 65535/65535KB (J
JavaSE 學習筆記之封裝(四)
延遲加載 分類 static str super 想要 oid 懶漢式 可靠性 封 裝(面向對象特征之一):是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。 好處:將變化隔離;便於使用;提高重用性;安全性。 封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提
Django重新開始學習--環境搭建 筆記(一)
nbsp url對應 tin art admin set pla base default 環境 : python2.7 django 1.9.8 使用工具pycharm Mysql =====================================
javascript中的DOM介紹(一)
item 檢測 turn 及其 篩選 層次 proto nbsp log 一、基礎知識點 1、DOM是文檔對象模型,是針對HTML和XML文檔的一個API(應用程序接口) 2、DOM描繪了一個層次化的節點數,允許開發人員進行添加,移除個修改等操作 3、IE瀏覽器中所有的DO
jQuery EasyUI快速入門實戰教程(一)-入門
jquery javascript easyui 1、jQuery EasyUI概述jQuery EasyUI是一組基於jQuery的UI插件集合體,而jQuery EasyUI的目標就是幫助web開發者更輕松的打造出功能豐富並且美觀的UI界面。開發者不需要編寫復雜的javascript,也不需要
朗科學習期間心得筆記(一)
網絡運維基礎(一)1.完整的操作系統由內核(kernel)和應用(application)組成。 linux內核版本由 主版本號+此版本號+小改動(註:在2.X的版本奇數代表測試版偶數代表穩定版) 可在 http://www.kernel.org 此網站內獲取內核源代碼。內核的主要功能有:驅動硬件、資源