JS框架設計讀書筆記之 選擇器引擎01

2022-02-09 08:34:14 字數 1887 閱讀 1964

選擇符是指css樣式規則最左邊的部分,例如 p{},#id{},.class{},p.class{} 等等

總共可以分為四大類:

併聯選擇器=> 逗號 => $('div,span')

簡單選擇器=> id,class,tag,attr,* => $('#id'),$('.class'),$('div'),$('[attr]'),$('*')

關係選擇器=> ' '、'>'、'+'、'~' => $('div span')、$('div>span')、$('div+div')、$('div~div')

偽類=> 動作偽類、目標偽類、語言偽類、狀態偽類、結構偽類、取反偽類

關係操作符不可單獨存在,必須在兩個tag之間(引擎可能允許放在開始,預設頭部為*)。

後代選擇器:通常在引擎中構建乙個getall的函式,在傳入乙個元素後,取得元素所有的後代元素。注意ie下使用document.all與document.getelementbytagname可能有將注釋混入結果集。

親子選擇器:如果不打算相容xml,直接用children就可以了。ie下也可能會有混入注釋節點的問題。

function

getchildren(el)

var ret =;

//用nextsibling遍歷

for (var node = el.firstchild; node; node =node.nextsibling)

return

ret;

}

相鄰選擇器:取得當前元素向右的第乙個元素節點

function

getnext(el)

//nextsibling會將回車當成#text 所以要進行判斷

while (el =el.nextsibling)

}}

兄長選擇器:取得右邊所有同級元素節點

動作偽類:包括:visited,:link,:hover,:active,:focus

目標偽類:即target偽類,指id或者name屬性與url中#後面的部分匹配。

比如說:有to div與got it

這個div就是target

'target': function

(elem)

語言偽類:內容 用的少,不寫了,這玩意還有繼承性

狀態偽類:標記乙個元素當前狀態,由 :checked、:enabled、:disabled、:indeterminate組成,可以通過元素checked,disabled,indeterminate判定。

話說這個:indeterminate啊,是checkbox的乙個屬性,可以console.dir('checkbox節點')檢視,預設為false。然後只能通過js**將其設為true,效果就是checkbox核取方塊預設中間加了個減號,點選後恢復正常的checkbox,沒什麼卵用。

結構偽類:分為根偽類、子元素過濾偽類、空偽類三種。根偽類由它在文件的位置判定,子元素過濾偽類根據它在其父親所有孩子的位置或標籤型別判定,空偽類是根據它孩子的個數判定。

:root 偽類用於選取根元素,html文件通常是html元素。

:nth-child 是所有子元素過濾偽類的藍本,帶有引數,可能包含字母n或數字。

:empty 用於選取那些不包含任何元素節點、文字節點、cdata節點的元素

待續...

JS框架設計讀書筆記之 選擇器引擎02

以sizzle的主函式宣告為例,來說明引擎的相關概念。function sizzle selector,context,results,seed 種子集seed 如果css選擇器非常複雜,需要分幾步來得到結果,那麼第一次得到的元素集合就叫種子集。sizzle引擎的解析基本上是由右到左,種子集中的一部...

JS框架設計讀書筆記之 動畫

css樣式可分為兩種,一種值接近無限的集合 color,width 一種值只有幾種 display 可以進行計算的樣式,產生了動畫效果。1.動畫的第一步是獲得元素的精確樣式值。2.若要做平移,傳入結束位置 距離 時長 fps。tips fps設定多少合適?除了人的眼睛,還要考慮到顯示器的顯示速度與瀏...

JS框架設計讀書筆記之 節點模組

瀏覽器提供了多種手段建立api,從流行程度依次是document.createelement innerhtml insertadjacenthtml createcontextualfragment。document.createelement 傳入乙個標籤名,返回此型別的元素節點。對於瀏覽器不支...