1. 程式人生 > >jQuery原始碼學習---簡單dom封裝(一)

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學習之路0714markDown標籤的簡單使用,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 此網站內獲取內核源代碼。內核的主要功能有:驅動硬件、資源