Jquery学习笔记 - 选择器

  Jquery选择器与CSS选择器非常相似,CSS选择器提供诸多功能,同时两者在解析上均采用从右向左解析,因为在建立Render Tree时,若采用自左向右解析,没词匹配不成功均需要退回再进行匹配,而反向解析利用排除法,逐步缩小元素候选集,优化了从子元素找父元素的过程,对于大量元素很有效(所以采用通配符很低效)

  CSS的基础选择器:

  群组选择器:selector1, selector2, selector3...

  简单选择器:ID" #id ",标签" tag ",类" .class ",属性“ [att , att=val , att~=val , att|=val , att^=val , att*=val , att$=val] ”,通配符“ * ”

  关系选择器:孩子“parent > child”,后代“ancestor descendant”,相邻“prev + next”,兄弟“prev ~sibling”

  伪类选择器:动作伪类,目标伪类,语言伪类,状态伪类,结构伪类,取反伪类 (伪类采用筛选器,基本、内容、可见、子元素、表单筛选器)

  普通接口兼容性:

  关于属性attributes:IE8前必须使用getAttribute(‘className‘),而其余为getAttribute(‘class‘)

  关于getElementById:IE8之前不区分ID大小写,且无法识别重名的表单name和ID

  关于getElementByTagName:IE6-8会将注释节点纳入通配符的选择范围,需要递归判断nidetype=1才可取

  关于getElementByClassName:IE不支持此方法

  

  //为通配符做兼容性处理

  function byTagName(tag, context) {

    var  ele,

           tmp=[],

             index = 0,

      resulrs = context.getElementByTagName(tag);

    if(tag === "*") {

      while((ele = result[index++])) {

        if(ele.nodetype === 1) {

          tmp.push(ele);

        }  

      }

      return tmp;

    }

    return results;

  };

  //getElementsByClassName
  function getClassNames(tagName, classStr) {
    var nodes = document.getElementsByTagName(tagName),
    ret = [];
    for (i = 0; i < nodes.length; i++) {
      if (hasClass(nodes[i], classStr)) {
      ret.push(nodes[i])
      }
    }
    return ret;
  }

  function hasClass(tagStr, classStr) {
    var arr = tagStr.className.split(/\s+/);  //class可以有多个
    for (var i = 0; i < arr.length; i++) {
      if (arr[i] == classStr) {
      return true;
      }
    }
    return false;
  }

  高级接口querySelector:

  querySelector返回一个集合,element.querySelectorAll返回集合(nodelist)其中包括element本身,这两个选择器无论之前调用的上下文element如何,总是在document范围内查找所有满足的元素,其次查找上句中得到的元素集合中符合子元素,返回这些元素,于是自然包括element元素,这也解释了为何element元素会被返回

  高级接口兼容性:

  前文提到querySelectorAll无视上下文,始终在document中查找,这导致返回element本身,针对这个问题,采用Andrew Dupont方法加以修复 - 利用临时添加的ID显示范围,并在使用后删除,如下

  var context = document.querySelector(‘.aaron‘);
  var old;
  var nid = Math.random();

  //是否有ID/‘|\\/g
  if ((old = context.getAttribute("id"))) {
    nid = old.replace(/‘|\\/g, "\\$&");
  } else {
    context.setAttribute("id", nid);
  }
  nid = "[id=‘" + nid + "‘] ";

  var newSelector = nid + ‘.aaron span‘;

  if (newSelector) {
    try {
      alert(context.querySelectorAll(newSelector).length)
    } catch (qsaError) {} finally {
    //如果是通过增加的范围,则要删除
      if (!old) {
        context.removeAttribute("id");
      }
    }
  }  

  源代码分析系列:

  ~ing

参考    慕课网:https://www.imooc.com/learn/172

   博客园:https://www.cnblogs.com/chuaWeb/p/jQuery-1-9-1-jQuery-selector1.html

原文地址:https://www.cnblogs.com/KEVIN--LEE/p/8244271.html

时间: 2024-08-11 09:25:52

Jquery学习笔记 - 选择器的相关文章

JQuery学习笔记-选择器-(一)

选择器的简单使用 <%-- Created by IntelliJ IDEA. User: cxspace Date: 16-8-25 Time: 下午2:29 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html&

JQuery学习笔记-选择器-1

在jQuery中 $()方法等价于jQuery()方法,前者比较常用,是后者的简写.一般只有在$()与其它语言冲突时才会使用jQuery()方法. parent > child选择器的范围,它所选择的目标是子集元素,相当于一个家庭中的子辈们,但不包括孙辈,它的调用格式:$("parent > child"),child参数获取的元素都是parent选择器的子元素,它们之间通过">"符号来表示一种层次关系. prev + next选择器就可以查找与&

jQuery学习笔记——jQuery常规选择器

一.简单选择器在使用 jQuery 选择器时,我们首先必须使用“$()”函数来包装我们的 CSS 规则.而CSS 规则作为参数传递到 jQuery 对象内部后,再返回包含页面中对应元素的 jQuery 对象.随后,我们就可以对这个获取到的 DOM 节点进行行为操作了.#box {//使用 ID 选择器的 CSS 规则color:red;//将 ID 为 box 的元素字体颜色变红}在 jQuery 选择器里,我们使用如下的方式获取同样的结果:$('#box').css('color', 'red

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

JQuery学习笔记(1)

JQuery学习笔记(1) 认识JQuery 简介 JQuery是一个JavaScript库,语法简洁,有跨平台的兼容性,简化了开发人员遍历html文档.操作dom.处理事件.执行动画和开发Ajax的操作.理念是:写得少,做得多. 优点 1.轻量级.UglifyJS压缩后大小保持在30KB 2.选择器强大. 3.DOM操作封装. 4.可靠地事件处理机制. 5.完善的Ajax. 库类型 jquery.js(开发版) 约229kb,用于学习和开发. jquery.min.js(生产版) 约31kb,

jQuery学习笔记(2014年8月3日)事件委派

jQuery中的事件委托是通过 closest() 来完成的. closest() 方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上. 参考资料: jQuery 遍历 - closest() 方法http://www.w3school.com.cn/jquery/traversing_closest.asp jQuery学习笔记(2014年8月3日)事件委派

锋利的JQuery 学习笔记

第一章 认识JQuery ·页面加载事件(可以写多个ready())$(document).ready(function(){alert(“hello world”);}) ·链式操作:JQuery允许你在一句代码中操做任何与其相关联的元素,包括其子元素.父元素等//选择名称为myDiv的元素,为其自身添加css1的样式,然后再选择其所有子元素a,为其移除css2样式$(“#myDiv”).addClass(“css1″).children(“a”).removeClass(“css2″); ·

jQuery 学习笔记

jQuery 学习笔记 position()是相对父元素的,有top.left两个属性. offset()是相对于document的当前坐标. offsetParent()是获取离元素最近的有定位的父元素. .closet() 获取最近的匹配选择器的父元素. off()移除一个事件处理函数,要删除委托事件需提供对应的选择器. detch()和remove()一样,但是不会移除绑定数据,以便以后添加.empty()是清空该元素的所有子元素.

Js脚本之jQuery学习笔记(1)

Js脚本之jQuery学习笔记(1) 一.javascript基础 单行注释 多行注释 /* */ 数据类型 数值型 字符串型 布尔型 空值 未定义值 转义字符 函数定义:1234567891011121314<head><script language="javascript"function test(m){var xixi="嘻嘻"alert("这是javascript")document.write(xixi + m)}