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. Scanner扫描器的使用

    Scanner:扫描器,可以通过Scanner类扫描用户在控制台录入的数据. 1.导包 //导包快捷键Alt+Enter 2.创建键盘录入对象 //键盘录入对象的名称为 “sc” 3.接收数据 //将 ...

  2. 使用JUnit 和Jacoco进行单元测试

    Jacoco配置 <dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven ...

  3. Skywalking的存储配置与调优

    https://blog.csdn.net/smooth00/article/details/96479544 作为一款APM和全链路监控平台,Skywalking算是挺出色的.Skywalking是 ...

  4. 一种基于LQR使输出更加稳定的算法(超级实用)

    已知: 令: 则: 以上三式成立 具体步骤: 状态量最后一行加入“上一时刻的控制量”: A,B根据上述方法变形: Q,R增加维度(控制量一般都为一个,此时R维度不变): 最关键的是——输出量已经变为“ ...

  5. node:semantic version instruction

    [major].[minor].[patch] MAJOR version when you make incompatible API changes, MINOR version when you ...

  6. 使用vs2019加.net core 对WeiApi的创建

    vs2019创建webapi 1.创建新的项目 2.选择.NET CORE的ASP .NET CORE WEB应用程序 3.定义项目名称和存放地点 4.选择API创建项目 5.删除原本的无用的类 6. ...

  7. 请解释ASP. NET中的web页面与隐藏类之间的关系

    请解释ASP.NET中的web页面与其隐藏类之间的关系 其实页面与其隐藏类之间就是一个部分类的关系,你在页面上放一个一个的控件就是在这个类中定义一个一个的属性, 因为是同一个类的部分类的关系,所以隐藏 ...

  8. SCOI 2010 连续攻击游戏(贪心,图论)

    SCOI 2010 连续攻击游戏 solution 直接就硬刚 我愿称贪心为暴力 因为题目中要求一定从小到大贪心,那么当前点的下标有能够选取的较大点,那么它一定可以和前面的一个较小点连接,所以可以直接 ...

  9. 【笔记】在java中String类为什么要设计成final?

    部分内容转自知乎:https://www.zhihu.com/question/31345592 从自己的理解进行加工,压缩. String本质上是一个final类 public final clas ...

  10. mysql逗号分隔问题

    1.说明: 之前写了一个发先了有点问题, 用正则去匹配的会匹配多了数据,所以优化下 媒资表(asset_baseinfo)里面有地区,如下,如果一个节目包含多个地区,id存在如下 地区表(produc ...