跟著Zepto學dom操作(一)

2021-09-11 12:09:40 字數 2137 閱讀 8110

之前有嘗試著去閱讀jquery原始碼,但是由於原始碼過長再加上自己技術上有點不到家,在嘗試過幾遍之後不得不遺憾的選擇放棄。對dom的操作一直都使用jquery,如果讓我用原生的js去操作dom,會發現自己不能很快的實現需求,所以這次選擇zepto的原始碼去深入挖掘dom操作。注意,此次選用的zepto選用最新1.2.0的版本,所以不太適用於pc瀏覽器。

jquery有乙個非常強大的dom選擇器引擎sizzle,選擇速度堪稱業內頂尖,zepto號稱移動端的jquery,那麼其肯定需要乙個自己的選擇器,現在我們來看看這個非常小巧輕便的選擇器。

// 該正則匹配a-z,a-z,下劃線,-所連著的單詞,驗證是否為單個類名

var ******selectorre = /^[\w-]*$/;

zepto.qsa = function(element, selector)

dom = zepto.qsa(document, selector)

//queryselectorall方法支援ie8+,不過在ie8中只支援css2.1選擇器。

複製**

解決了選擇元素的問題,我們現在可以來看看具體的dom操作了。

attr:function(name,value))

}function

funcarg(context, arg, idx, payload)

function

setattribute(node,name,value)複製**

var classcache = {};

//classcache中其初始值為{},當呼叫該函式時,會返回乙個正規表示式,其匹配開頭或者空白(包括空格、換行、tab縮排等)+name+結尾或者空白(包括空格、換行、tab縮排等)。不過還是沒有弄懂為什麼要將class的正則儲存起來。

function

classre(name)

//去獲取classname

function

classname(node, value)

//判斷是否有該class

hasclass: function(name), classre(name))

},//新增元素

addclass: function(name), this)

classlist.length && classname(this, cls + (cls ? " " : "") + classlist.join(" "))

})},//移除元素

removeclass: function(name))

classname(this, classlist.trim())

})},toggleclass: function(name, when))

})},複製**

在函式classname中有個判斷svg的特殊方法,即svg= klass && klass.baseval !== undefined。svg這個元素比較特殊,其通過document.getelementsbyclassname('icon--logo')[0].classname獲取到的內容如下顯示:

svg.png

通過讀取classname.baseval的形式來判斷是否為svg元素。同時設定其class的方式也不能通過classname的形式直接設定,也要通過classname.baseval的形式去設定才能生效。

zepto的class設定方式非常的巧妙,相容性也比較好,但是如果只是在移動端使用的話,完全可以用html5中提供的classlist介面去取代,該介面的相容性非常的棒,目前(2023年11月)能夠直接使用,無需考慮相容性問題,是的,svg元素也能夠使用。下面將用classlist的形式改寫下這些函式(注:下面的函式只能設定讀取乙個class,如果要實現多個class,稍微在這基礎上改寫下就行了):

addclass:function(name))

}removeclass:function(name)

item.classlist.remove(name)

})}toggleclass:function(name))

}複製**

跟著小白學SpringCloud(一)

springcloud也是基於rpc遠端呼叫的,是在soa架構基礎上演變而來,相對於soa架構來說更加請假,而且開發要求不是特別嚴格,基於http rest json進行資料的傳輸 springcloud基於springboot,提供很多元件,有eureka,ribbon,fegion,zuul,c...

跟著小YI 學HashMap 原始碼(一)

initializes or doubles table size.if null,allocates in accord with initial capacity target held in field threshold.otherwise,because we are using powe...

跟著官網學solr(一) solr環境的搭建

最近越來越覺得了解的東西太少,趁最近時間稍多一些,準備學習下solr。學習目標 1.使用solr進行資料的索引及基本的資料查詢 2.了解建立索引及查詢索引的過程 3.進一步了解solr的配置 集群 hdfs 外掛程式等 4.掌握常用查詢方法 4.進入 solr home bin 中,執行solr.c...