选择符

  选择符是指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) {
// 该方法显示子节点数量
if (el.childElementCount) {
return [].slice.call(el.children);
}
var ret = [];
// 用nextSibling遍历
for (var node = el.firstchild; node; node = node.nextSibling) {
// 只弹入元素节点
node.nodeType == 1 && ret.push(node);
}
return ret;
}

  相邻选择器:取得当前元素向右的第一个元素节点

    function getNext(el) {
// 有此方法直接用 返回下一个元素节点
if ('nextElementSibling' in el) {
return el.nextElementSibling;
}
// nextSibling会将回车当成#text 所以要进行判断
while (el = el.nextSibling) {
if (el.nodeType === 1) {
return el;
}
}
}

  兄长选择器:取得右边所有同级元素节点

  伪类

  

  动作伪类:包括:visited,:link,:hover,:active,:focus

  目标伪类:即target伪类,指id或者name属性与URL中#后面的部分匹配。

  比如说:有<a href="#div">to div</a>与<div id='div'>got it</div>这个div就是target

    'target': function(elem) {
// 获取所有链接
var hash = window.location && window.location.hash;
// 返回与id匹配的hash值
return hash && hash.slice(1) === elem.id;
}

  语言伪类:<body lang='...'>内容</body> 用的少,不写了,这玩意还有继承性

  状态伪类:标记一个元素当前状态,由 :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框架设计读书笔记之-选择器引擎01的更多相关文章

  1. JS框架设计读书笔记之-选择器引擎02

    选择器引擎涉及相关概念 概念 以Sizzle的主函数声明为例,来说明引擎的相关概念. function Sizzle(selector, context, results, seed) { //... ...

  2. JS框架设计读书笔记之-动画

    基础概念 CSS样式可分为两种,一种值接近无限的集合(color,width),一种值只有几种(display),可以进行计算的样式,产生了动画效果.\ 1. 动画的第一步是获得元素的精确样式值. 2 ...

  3. JS框架设计读书笔记之-节点模块

    节点的创建 浏览器提供了多种手段创建API,从流行程度依次是document.createElement.innerHTML.insertAdjacentHTML.createContextualFr ...

  4. JS框架设计读书笔记之-核心模块

    随笔记录一下读书心得 1. 框架模块-核心模块 该模块是框架最先执行的部分,jQuery与vue中都有初始化的代码. 模块的功能主要是:对象扩展.数组化.类型判定.事件绑定和解绑.无冲突处理.模块加载 ...

  5. JS框架设计读书笔记之-小知识

    这一篇写一点小知识 JS中0.1+0.2为什么不等于0.3? 关于这个问题之前也很疑虑,老师也只是笼统的讲这是JS的语言问题,但是内部具体的情况却没有讲,看了书才发现原理如此简单. 简单来讲,计算机识 ...

  6. JS框架设计读书笔记之-异步

    setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...

  7. JS框架设计读书笔记之-函数

    这次写一些函数 1.模拟Object.keys方法 Object.keys = Object.keys || function(obj){ var a = []; // a[0],a[1]...分别赋 ...

  8. javascript框架设计(读书笔记)

    我觉得多看几本进阶的书 与其十本书读一遍,不如一本书读十遍 读书的启示: 读好书(看推荐) 精读(重复看) 能读厚书(javascript权威指南) Object.keys Object.keys=O ...

  9. js框架设计1.1命名空间笔记

    借到了司徒正美的写的js框架设计一书,司徒大神所著有些看不太懂,果然尚需循序渐进,稳扎js基础之中. 第一张开篇司徒阐述了种子模块的概念 种子模块亦为核心模块,框架最先执行模块,司徒见解应包含:对象扩 ...

随机推荐

  1. ngRepeat track by

    刚刚看见一篇文章讲述track by的功能的,大致记录如下: 1. ng-repeat="friend in friends" 一般不使用track by的情况下,每次刷新DOM, ...

  2. ActiveMQ 入门helloworld

    1.下载安装ActiveMQ 官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Unix 等几个版本 ...

  3. .Net Core2.0 + Nginx + CentOS 部署

    准备把项目往Linux上迁移,整个流程跑了一下,也遇到无数个坑...以下为亲测并修改后的完整流程... 安装ZIP yum install -y unzip zip Putty:WINDOWS上传文件 ...

  4. 我的第一个python web开发框架(1)——前言

    由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足.所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀.这两年多以来找各种机 ...

  5. vue实例讲解之axios的使用

    本篇来讲解一下axios插件的使用,axios是用来做数据交互的插件. 这篇将基于vue实例讲解之vue-router的使用这个项目的源码进行拓展. axios的使用步骤: 1.安装axios npm ...

  6. es6函数的rest参数和拓展运算符(...)的解析

    es6的新特性对函数的功能新增加了rest参数和...的拓展运算符.这是两个什么东西呢? 先来看一个问题:如何获取一个函数除了定义的参数之外的其他参数?传统的做法是借助函数的arguments关键字来 ...

  7. Linux入门之常用命令(13) crontab

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  8. 最接近原生APP体验的高性能前端框架-MUI

      前  言 轻量,原生UI,流畅体验,是MUI的三个特征.   1. 新手指南 快速体验 1. 下载Hello mui App 下载已打包好的Hello mui 手机app,直接在手机上体验mui的 ...

  9. [bzoj1059] [ZJOI2007] 矩阵游戏 (二分图匹配)

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选 ...

  10. Docker到底是什么

    简单讲docker和vm虚拟机类似,都是在同一硬件上虚拟化出多个服务器应用实例的功能,据Bottomley声称,借助经过全面调优的容器系统,你就可以在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机 ...