What's jQuery

jq就是一个封装了很多方法的js库。

Why use jQuery

原生js的缺点

  • 不能添加多个入口函数(window.onload),如果添加多个,后面会把前面的覆盖
  • api名字都太长太难记
  • 代码冗余
  • 某些属性或者方法存在浏览器兼容性问题
  • 容错率低

jq的优点

  • 可以写多个入口函数
  • jq的api名字较容易记
  • 代码简洁(隐式迭代)
  • 解决了浏览器兼容问题
  • 容错率高

How to use jQuery

  • 1.引入jQuery文件.
  • 2.写一个入口函数.
  • 3.找到你要操作的元素(jq选择器),去操作(添加属性,样式,文本.....)

jq的入口函数

  1. 两种写法
// 1.1
$(document).ready(function (){ });
// 1.2
$(function (){ });
  1. jq入口函数和window.onload入口函数的区别
  • window.onload入口函数不能写多个,但jq的入口函数可以
  • 执行时机不同:jq入口函数要快于window.onload
    • jq入口函数要等待页面上的dom树加载完后执行
    • window.onload要等待页面上所有的资源(dom树/外部css/js连接,图片)都加载完毕后执行
$(function () {
console.log("我是一个入口函数");
});
$(function () {
console.log("我又是一个入口函数");
});

jq中的$

  1. $是什么?
  • 如果报了$ not defined,就说明没有引入jq文件
  1. jq文件结构
  • 其实是一个自执行函数
(function(){
window.jQuery = window.$ = jQuery;
}());
  • 引入一个js文件,时会执行js文件中的代码
  • jQuery文件是一个自执行函数,执行这个jQuery文件中的代码,其实就是执行这个自执行函数
  • 这个自执行文件就是给window对象添加一个jQuery属性和$属性
  • $其实和jQuery是等价的,是一个函数

    console.log(window.jQuery === window.$); //true
  1. $是一个函数,参数传递不同,效果也不一样
  • 如果参数传递的是一个匿名函数 - 入口函数
$(function(){

});
  • 如果参数传递的是一个字符串 - 选择器/创建一个标签
$('#one');
$('<div>这是一个div</div>');
  • 如果参数是一个dom对象,那他就会把dom对象转换成jQuery对象

    $(dom对象);

dom对象和jQuery对象

  1. dom对象
  • 原生js选择器获取到的对象
  • 特点:只能调用dom对象或者属性,不能调用jQuery的属性或者方法
document.getElementById("");
document.getElementsByClassName("");
var div1 = document.getElementById("one");
div1.style.backgroundColor = 'red';//dom对象可以调用dom属性和方法
div1.css('backgroundColor','green');//报错
  1. jQueryd对象
  • 利用jq选择器获取到的对象
  • 特点:只能调用jq的对象或者属性,不能调用原生js的属性或者方法
var $div1 = $('one');
$div1.css.('backgroundColor','green');
$div1.style.backgroundColor = 'red';//报错
  • jQuery对象是一个伪数组,jQuery对象其实就是dom对象的一个包装集
  1. dom对象和jq对象的相互转换
  • dom转jq
var div1 = document.getElementById("one");
var $div1 = $(div1);
  • jq转dom
1.使用下标取出来

var $divs = $('div');
var div1 = $div1[0]; 2.使用jq的方法 get(); var div2 = $divs.get(1);

选择器

基本选择器

名称 用法 描述
ID选择器 $('#id') 获取指定id元素
类选择器 $('.class') 获取同一类的元素
标签选择器 $('div') 获取同一标签的所有元素
  • 总结:和css的选择器用法一模一样

层级选择器

名称 用法 描述
子代选择器 $('ul>li') 获取儿子层级的元素,不包含孙子层级的元素
后代选择器 $('ul li') 获取ul下的所有li元素,包括孙子等
  • 和CSS选择器用法一模一样

过滤选择器

  • 这类选择器都带冒号
名称 用法 描述
:eq(index) $('li:eq(2)') 获取li元素中,选择索引为2的的元素,索引从0开始
:odd $('li:odd') 获取li元素中,选择索引号为奇数的元素
:even $('li:even') 获取li元素中,选择索引号为偶数的元素

筛选选择器(方法)

  • 筛选选择器的功能与过滤选择器有点类似,但是用法不一样,筛选选择器主要是方法。
名称 用法 描述
children(selector) $('ul').children('li') 相当于$('ul-li'),子代选择器
find(selector) $('ul').find('li') 相当于$('ul li'),后代选择器
siblings(selector) $('#first').sibling('li') 查找兄弟节点,不包括自身
parent() $('#first').parent(); 查找父亲
eq(index) $('li').eq(2) 相当于$('li:eq(2)')
next() $('li').next() 找下一个兄弟
prev() $('li').prev() 找上一次兄弟

设置文本内容 text();

    <input type="button" value="获取" id="getBtn" />
<input type="button" value="设置" id="setBtn" /> <div id="div1">
我是一个div标签
<p>我是一个p标签</p>
<span>span1</span>
</div>
<div>
我是一个div2标签
<p>
我是一个p2标签
<span>span2</span>
</p>
</div>
  1. 获取文本
$('#getBtn').click(function () {
//获取id为div1这个标签的文本
//会获取到这标签中所有的文本,包括后代元素的文本
console.log($('#div1').text()); //获取标签为div元素的文本
//包含了多个dom元素的jq对象,通过text()方法获取文本,会把所有dom元素的文本获取到。
console.log($('div').text());
})
  1. 设置文本
$('setBtn').click(function () {
//给id为div1的这个标签设置文本
//会覆盖原来的文本内容,如果设置文本中包含标签,是不会把标签解析出来的
$('#div1').text('我是新设置的文本');
$('#div1').text('我是新设置的文本<a>我是连接</a>'); //给标签为div的元素设置文本
//包含了多个dom元素的jq对象,通过text()方法设置文本,会把所有的dom元素都设置上
$('div').text('设置的文本');//隐式迭代
})

设置获取样式 css()

    <input type="button" value="获取" id="getBtn" />
<input type="button" value="设置" id="setBtn" />
<div id="div1" style="width: 200px;border: 1px solid red"></div>
<div id="div2" style="width: 300px;border: 1px solid red"></div>
<div id="div3" style="width: 400px;border: 1px solid red"></div>
  1. 获取样式:参数为要获取值的样式名
$('#getBtn').click(function () {
//获取di为div1这个元素的样式
console.log($('#div1').css('width'));
//在ie浏览器中,要获取边框这样的样式值,一定要记得给一个准确的边框
console.log($('div1').css('border-top-width')); //获取标签为div的元素们的样式
//获取包含了多个dom元素的jq对象的样式,只能获取到第一个dom对象的样式
console.log($('div').css('width'));
});
  1. 设置样式 css(样式名,样式值)
$('setBtn').click(function () {
//给di为div1的这个元素设置样式
//设置单样式
$('#div1').css('width','300px');
$('#div1').css('height',300); //设置多样式
$('#div1').css({
width:300,
'height':'300px',
'background-color':'red'
}); //给标签为div的元素们设置样式
$('div').css({
width:300,
'height':'300px',
'background-color':'red'
});
//隐式迭代
});

Class类操作

  1. 添加类:addClass(类名)

    • 添加单个类:$('obj').addClass('ClassName');
    • 添加多个类:$('obj').addClass('ClassName1 ClassName2');
  2. 移除类:removeClass(类名)
    • 移除单个或多个类:与添加同
    • 不写参数则移除全部类
  3. 判断类:hasClass(类名)
    • 判断有无某个类,返回值为boolean值
  4. 切换类:toggleClass(类名)
    • 如果元素存在指定类,则删除,否则添加

jq动画

三组基本动画

  • 显示(show)和隐藏(hide),切换(toggle);
  • 滑入(slideDown)与滑出(slideUp),切换(slideToggle);
  • 淡入(fadeIn)和淡出(fadeOut),切换(fadeToggle);
$obj.show([speed],[callback]);
// speed(可选):动画执行时间
//1.如果不传,就没有动画效果。如果是slide和fade系列,会默认为normal
//2.毫秒值(比如1000),动画在1000毫秒执行完成(推荐)
//3.固定字符串:slow(600),normal(400),fast(200)
//callback(可选):执行完动画后执行的回调函数
slideDown()/slideUp()/slideToggle();同理
fadeIn()/fadeOut()/fadeToggle();同理

自定义动画 animate();

  • $(selector).animate({params},[speed],[easing],[callback]);
  • 参数1(params):必选,对象,代表需要做动画的属性
  • 参数2(speed):可选,代表执行动画的时长
  • 参数3(easing):可选,默认swing(缓动),可以是(linear)
  • 参数4(callback):可选,动画执行完执行的回调函数

动画队列与停止动画

  • 在同一个元素上执行多个动画,那么对于这个动画来说,后面的动画会被放在动画队列中,等前面的动画执行完成了才会执行
// stop方法:停止动画效果
stop(clearQueue,jumpToEnd);
//第一个参数:是否清除队列(true or false) 默认flase
//第二个参数:是否跳转到最终效果(true or false) 默认flase

节点操作

创建节点

  1. html();

    • 设置或者获取内容
$('#btnHtml').click(function () {
//获取内容:html()方法不给参数
//获取到元素的所有内容
console.log($('#div').html()); //设置内容:html()方法给参数
//会把原来的内容给覆盖
//如果设置的内容中包含了标签,是会把标签给解析出来的
$('#div').html('我是设置的内容<a href="http://www.baidu.com">百度一下</a>');
});
  1. $();

    • 确实能创建元素,但是创建的元素只存在与内存中,如果要在页面上显示,就要追加
var $link = $('<a href="http://www.baidu.com">百度一下</a>');
$('#div').append($link);

添加节点

  1. append();

    • 父元素.append(子元素); 剪切后作为最后一个子元素添加
  2. prepend();
    • 父元素.prepend(子元素); 剪切后作为第一个子元素添加
  3. before();
    • 元素A.before(元素B); 把元素B插入到元素A的前面,作为兄弟元素添加
  4. after();

    -元素A.after(元素B); 把元素B插入到元素A的后面,作为兄弟元素添加
  5. appendTo();

    -子元素.appendTo(父元素); 把子元素作为父元素的最后一个子元素添加

清空与移除节点

  1. 清空元素:empty();
  2. 移除节点:remove();

克隆节点:clone()

  1. 只存在于内存中,如果要在页面上显示,就应该追加到页面上
  2. clone()方法参数不管是true还是false,都是会克隆到后代节点的
  3. clone()方法参数是true表示会把事件一起克隆到,参数如果是false就不会克隆事件,默认false

设置或者表单内容 val()

  1. val()方法 不给参数就是获取
  2. val()方法 给参数就是设置

操作属性

attr操作

  1. 设置属性

    • 设置单属性

      $(obj).attr('属性名','属性值');
    • 设置多属性
    $(obj).attr({
    属性名:'属性值',
    属性名:'属性值',
    属性名:'属性值'
    });
  2. 获取属性
    • $(obj).attr('属性名');
    • 如果没有这个属性,获取到的值就是undefined
  3. 移除属性: removeAttr();
    • 移除单属性

      $(obj).removeAttr('属性名');
    • 移除多属性

      $(obj).removeAttr('属性名 属性名 属性名');

prop操作

  • 在jq1.6之后,对于checked,selected,disable这类属性Boolean类型的属性来说,不能用attr方法,只能用prop方法
//设置属性
$(obj).prop('checked',true);
//获取属性
$(obj).prop('checked')//返回true或false

尺寸和位置操作

width方法和height方法

  • 设置或者获取高度,不包括内边距,边框和外边距
// 带参数表示高度
$('img').height(200);
// 不带参数获取高度
$('img').height();

获取网页的可视区宽高

// 获取可视区宽度
$(window).width();
// 获取可视区高度
$(window).height();

innerWidth/innerHeight/outerWidth/outerHeight

innerWidth()/innerHeight() //返回元素的宽度/高度(包括内边距)
outerWidth()/outerHeight() //返回元素的宽度高度 (包括内边距和边框)
outerWidth(true)/outerHeight(true) //返回元素的宽度高度 (包括内边距 边框和外边距)

scrollTop与scrollLeft

  • 设置或者获取垂直滚动条位置

    • 没有参数则获取,反之设置
// 获取页面被卷曲的高度
$(window).scrollTop();
//获取页面被卷曲的宽度
$(window).scrollLeft();

offset与position

  • offset方法获取元素距离document的位置,position方法获取的是元素距离有定位的父元素(offsetParent)的位置
// 获取元素距离document的位置,返回值为对象:(letf:100,top:100)
$(selector).offset();
// 获取相对于其最近有定位的父元素的位置
$(selector).position();

事件机制

发展历程

简单事件绑定--bind事件绑定--delegate事件绑定--on事件绑定

  • 简单事件注册
cilck(handler) 单击事件
mouseenter(handler) 鼠标进入事件
mouseleave(handler) 鼠标离开事件

缺点:不能同时注册多个事件

  • bind方式注册事件
// 第一个参数:事件类型
// 第二个参数:事件处理程序
$('p').bind('click mouseenter',function{
//事件响应方法
});
  • delegate注册委托事件
// 第一个参数:selector 要绑定事件的元素
// 第二个参数:事件类型
// 第三个参数:事件处理函数
$('.parentBox').delegate('p','click',function(){
//为.parentBox下面所有的p标签绑定鼠标点击事件
});
  • on注册事件

on注册事件

on注册简单事件

//表示给$(selector)绑定事件,并由自己触发,不支持动态绑定
$(selector).on('click',function () {});

on注册事件委托

// 表示给$(selector)绑定代理事件,当必须是它的内部元素span才能注册这个事件,支持动态绑定
$(selector).on('click','span',function() {});

事件委托原理

// 事件委托的原理
var ul = doucument.querySelector('#ul');
ul.onclick = function(e) {
//console.log(e.target.tagName);
if(e.target.tagName.toLowerCase === 'li'){
console.log(e.target);
}
}

事件解绑

  • unbind方式(不用)
$(selector).unbind(); //解绑所有的事件
$(selector).unbind('click') //解绑指定事件
  • undelegate方式(不用)
$(selector).undelegate(); //解绑所有的事件
$(selector).undelegate('click') //解绑指定事件
  • off方式(推荐)
// 解绑匹配元素的所有事件
$(selector).off();
//解绑匹配元素的所有click事件
$(selector).off('click');

触发事件

$(selector).click(); //触发 click
$(selector).trigger('click');

事件对象

jq事件对象其实就是js事件对象的一个封装,处理了兼容性

// screenX和screenY 对应屏幕最左上角的值
// clientX和clientY 距离页面左上角的位置(忽视滚动条)
// pageX和pageY 距离页面最顶部的左上角的位置(计算滚动条的距离)
// event.stopPropagation() 阻止事件冒泡行为
// event.preventDefault() 组织浏览器默认行为
// return false 既能阻止事件冒泡,又能阻止浏览器默认行为
// event.keyCode 按下的键盘代码

补充

链式编程

  • 通常情况下,只有设置操作才能把链式编程延续下去,因为获取操作的时会,会返回获取到的相应的值,无法返回jq对象

    end(); //筛选选择器会改变jq对象的dom对象,想要回复到上一次的状态,并且返回匹配元素之前的状态

each()方法

  • jq的隐式迭代会对所有的DOM对象设置相同的值,但是如果我们需要给每一个对象设置不同值的时候,就需要自己进行迭代

作用:遍历jq对象集合,为每个匹配的元素执行一个函数

//参数1 表示当前元素在所有匹配元素中的索引号
//参数2 表示当前元素(DOM对象)
$(selector).each(function(index,element){});

多库共存

  • jq使用$作为标识符,但是如果与其他框架中的$冲突时,jq可以释放$符的控制权

    var c = $.noConflict(); //释放$的控制权,并把$的能力给了c

插件

前端框架-jQuery自学笔记的更多相关文章

  1. jQuery:自学笔记(5)——Ajax

    jQuery:自学笔记(5)——Ajax 使用Ajax快捷函数 说明 出于简化AJAX开发工作的流程,jQuery提供了若干了快捷函数. 实例 1.显示 test.php 返回值(HTML 或 XML ...

  2. jQuery:自学笔记(4)——事件与事件对象

    jQuery:自学笔记(4)——事件与事件对象 jQuery中的事件 什么是事件 所谓事件,就是被对象识别的操作,即操作对象队环境变化的感知和反应,例如单击按钮或者敲击键盘上的按键. 所谓事件流,是指 ...

  3. jQuery:自学笔记(3)——操作DOM

    jQuery:自学笔记(3)——操作DOM 修改元素的属性 获取元素属性 设置元素属性 修改元素的内容 说明 有三种方式可以获取HTML元素的内容,分别是 ☐ text():设置或返回所选元素的文本内 ...

  4. jQuery:自学笔记(2)——jQuery选择器

    jQuery:自学笔记(2)——jQuery选择器 基本选择器 说明 jQuery的基本选择器与CSS的选择器相似: 实例 标签选择器 //使用标签选择器更改字体大小 $(div).css('font ...

  5. jQuery:自学笔记(1)——基础入门

    jQuery:自学笔记(1)——基础入门 认识JQuery 1.jQuery概述 jQuery是一个快速.小巧 .功能丰富的JavaScript函数库.它可以实现“写的少,做的多”的目标. jQuer ...

  6. 一款简洁而强大的前端框架JQUery—动画效果及剪刀石头布小游戏

    jQuery是什么? jQuery是一个快速.简洁的JavaScript框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画 ...

  7. 一款简洁而强大的前端框架—JQuery

    jQuery是什么? jQuery是一个快速.简洁的JavaScript框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画 ...

  8. jQuery自学笔记(二):jQuery选择器

    一.简单选择器 ID选择器:$('#box') 元素标签名:$('div') 类选择器:$('.box') jQuery提供了length和size()两种方法查看返回的元素,可验证ID在页面只出现一 ...

  9. jQuery自学笔记(一):初识jQuery

    jQuery 是一个 JavaScript 函数库, jQuery 库位于一个 JavaScript 文件中,其中包含了所有的 jQuery 函数,引用jQuery应该注意: <script&g ...

随机推荐

  1. cb35a_c++_STL_算法_for_each

    cb35a_c++_STL_算法_for_each for_each(b,e,p)使用for_each()算法遍历数据使用for_each()和函数对象修改数据使用for_each()的返回值 //转 ...

  2. opencv 单通道合并为多通道

    int main(){ cv::Mat m1=(cv::Mat_<int>(,)<<,,,,,); cv::Mat m2=(cv::Mat_<int>(,)< ...

  3. ps学习。

    ps软件及教程,这些东西,你应该要花一辈子来消化.

  4. centos 6.5 dhcp桥接方式上网络设置

    首先虚拟机和主机之间采用桥接模式 然后在虚拟机中进行设置,首先进入到目录 /etc/sysconfig/network-scripts/ [root@localhost ~]# cd /etc/sys ...

  5. java scoket aIO 通信

    AsynchronousServerSocketChannel assc.accept(this, new ServerCompletionHandler()); 第一个参数是服务器的处理类,第二个参 ...

  6. python 之 数据类型初接触

    python 之 数据类型初接触 标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dicti ...

  7. 安全测试中session和cookie

    很多朋友做过安全测试应该都知道session和cookies他们的不同点: 1.存取方式不同.----cookie不支持中文,需要编码,仅支持ascll值.session能够存取任何类型的数据,包括j ...

  8. app自动化测试环境配置:adb环境配置、monkey环境配置、appium环境配置大全

    1. 安装jdk 2. 安装配置Andriod sdk 安装Andriod sdk前首先需要安装配置好jdk环境. 然后安装Android sdk 安装完成后需要配置环境变量:ANDROID_HOME ...

  9. Java多线程之synchronized详解

    目录 synchronized简介 同步的原理 对象头与锁的实现 锁的优化与升级 Monitor Record 锁的对比 synchronized简介 synchronized关键字,一般称之为&qu ...

  10. HDU 5969 最大的位或【贪心】

    题目 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大. 其中|表示按位或,即C. C++. Ja ...