Vinson

Vinson

JQuery

发表于 2023-08-12
Vinson
阅读量 23

初识

console.log($ == jQuery);// true jQuery 就是 $ 等价的
js

页面加载

$(document).ready(function(){});// 相当于原生 window.onload(DOMContentLoaded)
js

比 onload 先执行

$(function(){})// 简写
js

只需要文档结构加载完毕后执行,onload 是文档和资源媒体加载完成。

DOM节点对象转换

jq 的 DOM 节点与原生 DOM 节点互转

// jq 转原生
console.log($(this));// 返回 jq 对象

// init 数组对象 通过下标获取到的就是原生的 DOM
console.log($('#box')[0]);
console.log($('#box').get(0));
$('#box').get(0).innerHTML = '哈哈';

## 让出 $ 的使用权限

jQuery.noConflict();
console.log($); // undefind
// 闭包 将 jQuery 传到闭包中的 $ 在闭包函数中又可以使用 $ 来进行 jq 的操作

;(function($){
  $(function(){
​    console.log($('#box'));
  })
})(jQuery)

// 给 $ 起个名字
var jq = jQuery.noConflict(true);
console.log(jq('#box'));
js

$ 下常用的方法

// 可以遍历数组,对象,jq元素
$.each(obj, function(key, value){
  console.log(key + ':' + value);
})
js

还可以 $(‘选择器’).each() // 遍历元素 工具级别

var newArr = $.map(arr,function(item){
  return item  item  item; 
})有返回值
$.type()  输出当前数据类型  typeof
$.trim()  删除字符串前后的空格
$.inArray()  indexOf()
$.proxy()  功能类似于bind $.proxy()
$.noConflict() 给$起个别名
$.parseJSON()  JSON.parse()
$.makeArray()  将伪数组转成数组。 Array.from()
js

JQuery 选择器

基本选择器

$('#box')// id 选择
$('.aa')// 类名选择
$('li')// 标签选择
js

层级选择器

$('ul li') // 后代 li
$('ul>li') // 子代的 li
$('#li1+li')// #li1 的下一个兄弟 li
$('#li1~li')// #li1 的所有的弟弟 li
js

基本过滤选择器

$('li:first')// 获取第一个元素
$('li:last')// 获取最后一个元素 
$('li:not(#li1)')// 排除
$('li:odd')// 选择索引奇数---显示的偶数行
$('li:even')// 选择索引偶数---显示奇数行
$('li:eq(3)')// 等于索引
$('li:gt(3)')// 大于索引
$('li:lt(3)')// 小于索引
// 选取索引为 n 的 li
$('li:eq(' + n + ')')
$('li').eq(n)
js

属性过滤选择器

$('li[name]')// 带有 name 属性的 li
$('li[name=lucy]')// name 属性值为 lucy 的 li
$('li[name!=joy]')// name 属性不为 joy 的 li
$('li[name=o]')// name 属性值包含 o 的 li
$('li[name^=j]')// name 属性的值以 j 开头的
$('li[name$=y]')// name 属性的值以 y 结尾的
js

表单选择器

$('input')// 标签 input
$(':input')// 不论标签名 只要是表单元素 都选取
$(':text')
$(':password')
$(':radio')
$(':checkbox')
$(':file')
$(':submit')
$(':button')
js

JQuery DOM 节点操作

DOM 节点遍历

遍历节点

$('ul').children()// ul 下的所有子节点
$('ul').children('p')// ul 下的 p 子节点
$('ul').find('p')// ul 下的所有后代 p
$('#box').next()// box 的下一个兄弟
$('#box').nextAll()// box 的下边的所有兄弟
$('#box').prev()// box 上一个
$('#box').prevAll()// 上边所有的兄弟
// box 的所有的兄弟节点(之前的和之后的全算)
$('#box').siblings()
$('#box').siblings('p')
js

遍历父节点

$('#box').parent()// 真正的父节点
$('#box').parents()// 所有的祖先节点
$('#box').parents('div')// 所有祖先中的 div
js

遍历节点 - 过滤

$('#box').find('li')// find 获取后代元素
$('li').filter('.aa')// filter 过滤找到满足条件的元素
$('li').not('.aa')// not 排除满足条件的元素 选择其他元素
js

属性操作

$('#box').attr('title')// 获取
$('#box').attr('title','xixi');// 设置
// 批量设置
$('#box').attr({
  title: 'heihei',
  sex : 'female'
})
$('#box').removeAttr('sex');// 删除属性
js

属性值为 true 和 false 的属性操作

$(':checkbox').attr('checked');// 获取 --> checked
$(':checkbox').prop('checked');// 获取 --> true
$(':checkbox').prop('checked', true);// 设置
js

class操作

$('#box').addClass('red');// 添加类 red
$('#box').removeClass('red');// 删除 red
js

判断该元素 box 上是否有 red

$('#box').hasClass('red') // Boolean
$('#box').is('.red')// Boolean
js

切换类名 toggleClass

$('#box').toggleClass('red');
js

css操作

// 获取样式
$('#box').css('width')
// 设置
$('#box').css('background','red');
// 批量设置
$('#div1').css({
  width:'200px',
  fontSize:'18px'// font-size 去-变驼峰
})
js

html 文本与值的操作

  • innerHTML —> html()
  • innerText —> text()
  • 表单value —> val()
$('#s1').html() // 获取 识别标签
$('#s1').text() // 获取 只识别文本

// 设置
$('#box').html('<i>过年好!</i>');// 会识别标签
$('#box').text('<i>过年好!</i>');// 不会识别

// 表单的value
$(':text').val()
$(':text').val('ddddd');
js

Node 操作

  • 创建元素
 $('<li></li>')
js
  • 添加节点
    • 在元素尾部添加
    • 新元素.appendTo(目标元素)
  $('<li>国庆节</li>').appendTo($('#list'));
js

目标.append(新元素)

  • 在元素头部添加
    • 新元素.prependTo(目标元素)
    • 目标.prepend(新元素)
  $('#list').prepend($('<li>元旦节</li>'))
js
  • 在目标元素之前插入
    • 新元素.insertBrfore(目标元素)
    • 目标元素.before(新元素)
  $('<li>情人节</li>').insertBefore($('#list li').eq(2));
js
  • 在目标元素之后插入
    • 新元素.insertAfter(目标元素)
    • 目标元素.after(新元素)
  $('#list li').eq(3).after($('<li>妇女节</li>'));
js
  • 删除节点
remove():  将节点删除,返回被删除的节点,不会保留节点上的事件
detach():  将节点删除,返回被删除的节点,会保留节点上的事件
empty():  全部清空
js
  • 克隆节点
clone()  复制节点及内容,但不保留节点上的事件
clone(true)复制节点及内容,保留节点上的事件
js
  • 替换节点
    • 新节点.replaceAll(要被替换的节点)
    • 要被替换的节点.replaceWith(新节点)
$('#list li').eq(2).replaceWith($('<li>女神节</li>'));
js

数据串联

serialize()

<input type="text" name = 'a' value = '1'/>
<input type="text" name = 'b' value = '2'/>
<input type="text" name = 'c' value = '3'/>
$("input").serialize()// a=1&b=2&c=3
$("input").serializeArray()// [{{name: "a", value: "1"}}, {…}, {…}]
js

add 和 slice

$("div").add("span").add("ul li").css("backgroundColor", 'red')
// 等同于
$("div,span,ul li").css("backgroundColor", 'red')// 与add一样
$("ul li").slice(1, 4).css("backgroundColor", 'red');// 获取从1到4的 li元素
js

JQuery BOM 操作

元素的宽高

  • 原生的元素的宽高分别那几种如何获取
    • 内容宽高----width height
    • 可视宽高— clientWidth/clientHeight
    • 占位宽高—offsetWidth/offsetHeight
$("#div1").css("width")// "100px" 字符串
js
  • jq 的元素宽高操作
    • 内容宽高 width() height() 方法
    • 可视宽高 innerWidth() innerHeight()
    • 占位宽高 outerWidth() outerHeight()
    • 整个宽高 outerWidth(true) outerHeight(true)
  • jq 获取可视区及文档的宽高
    • 可视区宽高 $(window).width()/.height()
  • 文档的宽高 $(document).width()/height()

元素的位置

$('#sub').offset() 返回一个对象  到文档的 left和top值
$('#sub').position() 返回一个对象 到有定位属性的父级元素的 left和top值
js

滚动条卷走的宽高操作

$(document).scrollTop() // 不传参获取,传参设置
js

jQuery 事件

event对象

jq中的事件对象 不需要兼容了 直接传参ev就可以了

  • ev.clientX/ev.clientY 事件触发的位置到浏览器可视区的上左边的距离
  • ev.currentTarget:当前事件触发的元素
  • ev.delgateTarget:当前事件绑定的元素
  • ev.offsetX/ev.offsetY: 事件触发的位置到元素的上左边的距离
  • ev.originalEvent: 元素事件对象
  • ev.pageX/ev.pageY:事件触发的位置到文档的上左边的距离
  • ev.screenX/ev.screenY:事件触发的位置到屏幕的上左边的距离
  • ev.which 类似于 keyCode 可以获取鼠标的键值 左键是1 右键是3 滚轮是2
  • 阻止默认事件 ev.preventDefault()
  • 阻止冒泡 ev.stopPropagation()
  • 阻止默认事件+冒泡 return false

事件绑定 on()

// 基本事件
$('#box').on('click',function(){})

// 一次绑定多个事件对应一个处理函数
$('#box').on('click mouseenter mouseleave',function(){})

// 绑定多个事件对应多个处理函数 对象形式
$('#box').on({
  'click': function(){},
  'dblclick':function(){}
})

// 自定义事件
$('#box').on('hahaha',function(){})

// trigger 触发事件
$('#box').trigger('hahaha');

// 事件委托
$('#list').on('click','li',function(ev){
  console.log($(ev.target).html());
})

// 事件的取消绑定
$('button:eq(0)').on('click', function(){
  console.log(1111);
})

$('button:eq(1)').on('click',function(){
  $('button:eq(0)').off();
  // $('button:eq(0)').off('mouseenter');
  // 传参取消事件类型
})

// 一个事件上绑定多个函数执行---事件的命名空间
$('button:eq(0)').on({
  'click.a':function(){
​    console.log(111);
  },
  'click.b':function(){
​    console.log(222);
  }
})

$('button:eq(1)').on('click',function(){
  $('button:eq(0)').off('click.a');
})

// 只执行一次的事件
$('button').eq(0).one('click',function(){
  console.log('一次就够了');
})

// 模拟执行一次事件
$('button').eq(0).on('click',function(){
  console.log('一次就够了');
  $(this).off();
})
js

合成事件

mouseenter 和 mouseleave

$('#box').hover(function(){
  // 鼠标移入执行函数
},function(){
  // 鼠标移出执行函数
})
js

jQuery 动画

显示隐藏

show(
  duration 动画执行时间-毫秒,
  easing 运动效果(只有两种 swing慢快慢,linear匀速,complate运动执行完成后的回调)
)
js

隐藏 hide() 显示隐藏的切换 toggle()

$('#box').show(1000,function(){
  alert('执行完毕');
})
js

淡入淡出

淡入fadeIn()

淡出 fadeOut()

透明度变化到 fadeTo()

淡入淡出切换 fadeToggle()

$('button').eq(0).on('click', function(){
  $('#box').fadeIn(1000);
})

$('button').eq(2).on('click', function(){
  $('#box').fadeTo(1000, .5);
})
js

下拉显示

下拉显示slideDown()

上拉隐藏 slideUp()

切换 slideToggle()

$('button').eq(2).on('click', function(){
  $('#box').slideToggle(1000);
})
js

animate

animate({属性1:目标值1,属性2:目标值2.。。}, duration动画持续时间,easing动画效果,callback回调)

// 累加
$('button').click(function(){
  $('#box').animate({width:'+=50'},200)
})

// 链式运动
$('button').click(function(){
  $('#box').animate({width:500},1000)
​        .animate({height:300},500)
​        .animate({opacity:.5},500)
})
js

动画队列

queue(function(next){})
// 将其他的操作加入到动画队列中 按顺序来完成

$('#box').animate({width:500},1000)
​    .queue(function(next){
​      $(this).css({background:'blue'});
​      next();// 继续执行后续的动画队列中的操作
​    })
​    .animate({height:300},500);
js

判断是否处于动画状态

$(元素).is(‘:animated’): 有动画在执行 返回 true 没有返回 false

$('#box').hover(function(){
  if(!$(this).is(':animated')){
​    $(this).animate({height:300},400);
  }
}, function(){
  $(this).animate({height:50},400);
})
js

延迟动画

$('#box').animate({width:500},1000)
​    .delay(2000)
​    .animate({height:300},500);
js

停止动画

stop(clearQueue清除动画队列, gotoEnd达到动画最终状态)停止动画 finish()完成动画—所有动画队列的效果达到最终状态(2.x以上版本支持)

// stop停止动画的几种组合
$('button').eq(1).click(function(){
  // 参数皆为false 不清除动画队列 不达到最终状态
  $('#box').stop(false, false); // 默认
  // 参数皆为true 清除动画队列 达到最终状态
  $('#box').stop(true, true);
  // true false 清除动画队列 不达到最终状态
  $('#box').stop(true, false);
  // false true 不清除动画队列 达到最终状态
  $('#box').stop(false, true);
})

// finish
$('button').eq(2).click(function(){
  $('#box').finish();
})
js

jQuery ajax 接口请求

$.ajax({
  url,
  cache,// 在 get 下是否启用缓存
  type,// get/post
  data,// 上传数据
  timeout,// 相应超时时间
  datatype,// 预期返回的数据类型默认 text
  success, // 成功回调
  error,
  conplate
})
js

跨域

dataType 设置为 jsonp

$.ajax({
  url:'https://www.baidu.com/sugrec',// ?prod=pc&wd=aa&cb=fn
  type:'get',
  data:{prod:'pc',wd:'cc'},
  dataType:'jsonp',
  success:function(res){
​    console.log(res);
  }
})
js

load 方法

将 url 传入以后,将下载到数据直接填充到被选中元素的 innerHTML 中

$("div").load("2.txt #p1", function(data, statusText, xhr){
  data    下载到的数据
  statusText 下载的状态 success
  xhr     ajax对象
})
js

jQuery cookie 操作

获取

$.cookie(name) 
js

设置

$.cookie(name, value) 设置name和value
$.cookie(name, value {
  raw: true // value不进行编码// 默认false value要进行编码的
})
js

删除

$.cookie(name, null); 删除cookie
js

实例

$.cookie("变种人", "X教授", {
  expires: 7,
  raw: true
})
js

编写 jQuery 插件

;(function($){
  // 类级别插件 ---> 将方法拷贝到 jq 的原型下
  $.extend({
​    'trimLeft' : function(str){
​      return str.replace(/^\s+/,'');
​    }
  })
  // 对象级别插件 拷贝到$.fn的原型下
  $.fn.extend({
​    'changeBg' : function(select,color){
​      this.children(select).css({background:color});
​      return this;
​    }
  })
})(jQuery)

var str = '    aaa   ';
console.log($.trimLeft(str));
$('ul').changeBg(':odd','pink');
js

Zepto.js 基本使用

基本和 jq 完全一样但是用到的模块要单独引入

$(function(){
  $('#box').on('tap', function(){
​    console.log('手指点击');
  })
})
js

zepto 和 jq 的区别

隐藏的元素的获取宽高

jq 可以获取隐藏元素的 width()/height()

zepto 中获取隐藏元素的 width()/height()都为 0

$('#box').width();// 隐藏的元素在 zepto 中获取宽高为 0
offset()的区别
js

jq 中返回一个对象 包含 元素到文档上左边的距离

zepto 中返回一个对象,包含元素到文档上左边的距离和元素的宽高
$('#sub').offset();// 元素到文档的上左边的距离
$('#sub').offset();// zepto中元素到文档的上左边的距离 和 元素的宽高
js

元素的宽高的获取区别

jq 获取元素的宽有 4 种方法

zepto 中只有一个 width()和height()方法 获取的是占位宽

$('#box').width();// 占位宽 内容宽 + padding + border
innerWidth();// 没有
outerWidth();// 没有
outerWidth(true);// 没有
js

touch 模块

tap 所有的触碰

singleTap 手指单击

doubleTap 手指双击

swipe swipeLeft swipeDown swipeRight swipeUp 手指滑动

longTap 手指长按

评论
来发一针见血的评论吧!
表情

快来发表评论吧~

推荐文章
  • 测试文章

    20点赞10评论

  • webpack5(一)

    20点赞10评论