欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jQuery 笔记

程序员文章站 2022-03-02 23:40:44
初识 console.log($ == jQuery);// true jQuery就是$ 等价的 页面加载 $(document).ready(function(){});//相当于原生window.onload(DOMContentLoaded) 比onload先执行 $(function(){ ......

初识

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

 

页面加载

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

比onload先执行

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

只需要文档结构加载完毕后执行,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'));

选择器

基本选择器

$('#box')//id选择

$('.aa')//类名选择

$('li')//标签选择

层级选择器

$('ul li') //后代li

$('ul>li') // 子代的li

$('#li1+li')//#li1的下一个兄弟li

$('#li1~li')//#li1的所有的弟弟li

基本过滤选择器

$('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)

属性过滤选择器

$('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结尾的

表单选择器

$('input')//标签input

$(':input')//不论标签名 只要是表单元素 都选取

$(':text')

$(':password')

$(':radio')

$(':checkbox')

$(':file')

$(':submit')

$(':button')

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')

遍历父节点

$('#box').parent()//真正的父节点

$('#box').parents()//所有的祖先节点

$('#box').parents('div')//所有祖先中的div

遍历节点 - 过滤

$('#box').find('li')// find  获取后代元素

$('li').filter('.aa')// filter 过滤找到满足条件的元素

$('li').not('.aa')// not 排除满足条件的元素 选择其他元素

属性操作

$('#box').attr('title')//获取

$('#box').attr('title','xixi');// 设置

// 批量设置

$('#box').attr({

    title: 'heihei',

    sex : 'female'

})

$('#box').removeattr('sex');// 删除属性

 

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

$(':checkbox').attr('checked');// 获取 --> checked

$(':checkbox').prop('checked');// 获取 --> true

$(':checkbox').prop('checked', true);// 设置

class操作

$('#box').addclass('red');//添加类red

$('#box').removeclass('red');// 删除red

判断该元素box上是否有red

$('#box').hasclass('red') // boolean

$('#box').is('.red')// boolean

切换类名  toggleclass

$('#box').toggleclass('red');

css操作

// 获取样式

$('#box').css('width')

// 设置

$('#box').css('background','red');

// 批量设置

$('#div1').css({

    width:'200px',

    fontsize:'18px'//font-size  去-变驼峰

})

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');

node操作

创建元素

  $('<li></li>')

添加节点

  在元素尾部添加

    新元素.appendto(目标元素)

    $('<li>国庆节</li>').appendto($('#list'));

    目标.append(新元素)

  在元素头部添加

    新元素.prependto(目标元素)

    目标.prepend(新元素)

    $('#list').prepend($('<li>元旦节</li>'))

  在目标元素之前插入

    新元素.insertbrfore(目标元素)

    $('<li>情人节</li>').insertbefore($('#list li').eq(2));

    目标元素.before(新元素)

  在目标元素之后插入

    新元素.insertafter(目标元素)

    目标元素.after(新元素)

    $('#list li').eq(3).after($('<li>妇女节</li>'));

删除节点

remove():   将节点删除,返回被删除的节点,不会保留节点上的事件

detach():   将节点删除,返回被删除的节点,会保留节点上的事件

empty():    全部清空

克隆节点

clone()    复制节点及内容,但不保留节点上的事件

clone(true)复制节点及内容,保留节点上的事件

替换节点

新节点.replaceall(要被替换的节点)

要被替换的节点.replacewith(新节点)

$('#list li').eq(2).replacewith($('<li>女神节</li>'));

数据串联

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"}}, {…}, {…}]

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元素

 

bom 

元素的宽高

原生的元素的宽高分别那几种如何获取

    内容宽高----width  height

    可视宽高--- clientwidth/clientheight

占位宽高---offsetwidth/offsetheight

$("#div1").css("width")//"100px" 字符串

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值

滚动条卷走的宽高操作

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

 

事件

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();

})

合成事件

mouseenter 和mouseleave

$('#box').hover(function(){

    // 鼠标移入执行函数

},function(){

    // 鼠标移出执行函数

})

$ 下常用的方法

// 可以遍历数组,对象,jq元素

$.each(obj, function(key, value){

    console.log(key + ':' + value);

})

还可以$('选择器').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()

动画

基本动画

显示隐藏

show(

    duration动画执行时间-毫秒,

    easing运动效果(只有两种  swing慢快慢,linear匀速, 

    complate运动执行完成后的回调)

)  

隐藏hide()  

显示隐藏的切换toggle()

$('#box').show(1000,function(){

    alert('执行完毕');

})

淡入淡出

淡入fadein()  淡出 fadeout()  透明度变化到  fadeto() 淡入淡出切换  fadetoggle()

$('button').eq(0).on('click', function(){

    $('#box').fadein(1000);

})

 

$('button').eq(2).on('click', function(){

    $('#box').fadeto(1000, .5);

})

下拉显示

下拉显示slidedown()  上拉隐藏 slideup()  切换 slidetoggle()

$('button').eq(2).on('click', function(){

    $('#box').slidetoggle(1000);

})

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)

})

动画队列

queue(function(next){})

将其他的操作加入到动画队列中 按顺序来完成

 

$('#box').animate({width:500},1000)

        .queue(function(next){

            $(this).css({background:'blue'});

            next();//继续执行后续的动画队列中的操作

        })

        .animate({height:300},500);

判断是否处于动画状态

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

$('#box').hover(function(){

    if(!$(this).is(':animated')){

        $(this).animate({height:300},400);

    }

}, function(){

    $(this).animate({height:50},400);

})

延迟动画

$('#box').animate({width:500},1000)

        .delay(2000)

        .animate({height:300},500);

停止动画

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();

})

ajax

$.ajax({

    url,

    cache,//在get下是否启用缓存

    type,// get/post

    data,// 上传数据

    timeout,//相应超时时间

    datatype,//预期返回的数据类型默认 text

    success, // 成功回调

    error,

    conplate})

跨域

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);

    }

})

load方法

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

$("div").load("2.txt #p1", function(data, statustext, xhr){

    data        下载到的数据

    statustext  下载的状态  success

    xhr         ajax对象

})

cookie

获取

$.cookie(name) 

设置

$.cookie(name, value) 设置name和value

$.cookie(name, value {

    raw: true  //value不进行编码

               //默认false value要进行编码的

})

删除

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

 

实例

$.cookie("变种人", "x教授", {

    expires: 7,

    raw: true

})

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');

zepto

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

$(function(){

    $('#box').on('tap', function(){

        console.log('手指点击');

    })

})

zepto和jq的区别

隐藏的元素的获取宽高

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

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

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

offset()的区别

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

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

$('#sub').offset();//元素到文档的上左边的距离

$('#sub').offset();//zepto中元素到文档的上左边的距离 和 元素的宽高

元素的宽高的获取区别

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

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

$('#box').width();//占位宽  内容宽 + padding + border

innerwidth();//没有

outerwidth();//没有

outerwidth(true);//没有

touch模块

tap 所有的触碰

singletap  手指单击

doubletap  手指双击

swipe  swipeleft  swipedown   swiperight  swipeup  手指滑动

longtap 手指长按