2022年3月的主要学习内容之一——简化js操作的函数库jQuery

关于jq,可以理解为另一种JavaScript的写法,是用更少的语言实现更多的功能。它大大简化了JavaScript原生代码的繁琐程度(如链式),当然虽然刚开始用可能很不习惯,但它确实让代码行数明显减少了

关于jQuery

1.jQuery核心代码$

实际上jquery是一个工具库,其中包含已经封装好的方法。其核心代码为$以及$()所调用的各类方法

var $obj = $(选择器)

$obj 是jquery对象(实例)

jQuery对象并不直接指向页面元素,用 console.log($obj)测试发现,他返回的是一个伪数组,这里就是他与原生代码 var ele = document.querySelector(选择器)的不同。

// 总结:

    // 原生dom对象就是个标签元素,不能直接调用jquery对象的方法

    // jquery对象不能直接操作原生dom对象的属性和方法

    // 如何js和jq混在一起操作页面元素,就需要dom对象和jquery对象转换

p.s.这里补充一下,应该还有个入口函数的问题。但归纳以后好像有点多,所以放个链接在这里,比较详细。

入口函数精简介绍


2.添加元素、删除元素、设置文本、设置样式、设置属性

添加元素

原生代码:Element.appendChild("")

jq代码:

在容器元素的最后的索引位置 添加元素 (父子关系)

$().append("")

在容器元素的索引为0的位置 添加元素(父子关系)

$().prepend("")

在当前的元素之前插入元素(兄弟关系)

$().before("")

在当前的元素之后插入元素(兄弟关系)

$().after("")

删除元素

原生代码:Element.removeChild("")

jq代码:

删除当前元素

$().remove("")

清空元素内容

$().empty("")

【这里也可以用$().html("")将内容设置为空】

设置元素内容

原生代码:

Element.innerHtml("")

Element.innerText("")

Element.style.样式

jq代码:

$().text()

$().html()

$().val()    设置或返回表单字段的值

$obj.css(属性名称,属性值)

$obj.css(属性对象)

例如:

$(".demo-5").css({

  width: 200,

  height: 80,

  backgroundColor: "green"

})

设置属性

原生代码:Element.setAttribute(attribute,value)

jq代码:$().attr()

例如:

// 设置元素的属性( src alt class id href ...)

var src = $("#layout img").attr("src");//获取src属性

console.log(src);

$("#layout img").attr("src","./imgs/2.png");//设置src属性

// $("#layout img").removeAttr("src");//删除src属性

设置多属性

$("button").click(function(){ $("#w3s").attr({ "href" : "http://www.w3school.com.cn/jquery", "title" : "W3School jQuery Tutorial" });});

控制类名

原生代码:

Element.className

Element.classList【其中有.add/.remove/.contains/.toggle】

jq代码:

$().addClass()

.removeClass()

.toggleClass()

.hasClass()

获取指定页面元素

原生代码:

...(这里实在有点多,因为又有父元素的代码如parentElement,又有父节点的代码parentNode,懒癌如我就不写了,详细翻拒绝摆烂第七天的代码)

jq代码:

获取页面所有某元素如container下的按钮

$("#container button")

eq()方法 获取页面第二个按钮

$("#container button").eq(2)

children()  获取#container子元素

$("#container").children()

parent()  获取section标签的父元素

$("section").parent()

prev()  获取当前标签的上一个元素

$("#container .btn-3").prev()

next()  获取当前标签的下一个元素

$("#container .btn-3").next()

获取兄弟元素(除了自身以外)

$("#container .btn-3").siblings(选择器)

获取容器标签的指定的后代元素

$("#container").find(选择器)



3.事件绑定和事件对象

怎么说呢,我的建议是不用记事件绑定,因为和原生代码差不多。但是呢,关于事件对象还是要明白是什么。 事件对象是事件触发时 产生的数据集合。在这个集合中可以获取关于当前事件的信息。(状态、位置、方法)

bind() 方法

这里还是写一下普通情况的绑定做对比:

代码1

// 绑定事件

// $(".btn-1").click(function(){

//     console.log("触发点击事件")

// })

代码2

bind 绑定事件(可以绑定多个事件)

// $obj.bind(参数1,参数2)

// $(".btn-1").bind("click mouseenter mouseleave",function(event){

//     // 获取事件类型

//     var _type = event.handleObj.origType;

//     console.log("触发事件类型:",_type);

// })

delegate() 方法

delegate: 委托

该方法用于事件委托,给祖先元素或父元素绑定事件,从而让所有的后代元素都绑定事件。

// $obj.delegate(参数1,参数2,参数3)

// $obj.delegate(选择器,事件类型,回调函数)

$(".container").delegate("button","click",function(){

    // 该方法直接可以通过this获取事件源

    console.log(this);//事件源

})

on() 方法

别问,问就是用on。该方法集以上两种方法为一体,总之就是直接用就行了好吧。

// 代码一、

// $("button").on('click mouseenter mouseleave',function(event){

//     console.log("事件触发了",event.handleObj.origType);

// })

// 代码二、

// $obj.on(参数1,参数2,参数3)

// 参数1:事件类型 ,参数2:选择器,参数3:回调函数

$(".box").on("click","button",function(){

    console.log(this);

})



4.动画函数

这里就不写js的原生代码了,这里需要注意的是,以下所有代码都是通过js来实现的。具体实现有空我会整理出来

元素的显示与隐藏()

直接隐藏显示(脱离文档流)

$dom.show()

$dom.hide()

$dom.toggle()

淡入淡出(脱离文档流)

$dom.fadeIn()

$dom.fadeOut()

$dom.fadeToggle()

下拉收起(脱离文档流)

$dom.slideDown()

$dom.slideUp()

$dom.slideToggle()

然后千呼万唤使出来的函数动画:

//动画函数

$dom.animate()

这里代码粘贴直接乱码?所以用图片吧



5.遍历函数

each() 方法

// each()

// 第一种写法:

// index: 代表索引值

// dom: 代表dom元素

// 作用:循环标签数组

// 调用者: $(".btn")  jquery对象

// $(".btn").each(function(index,dom){

//     // console.log(dom);

//     dom.style.backgroundColor = "red";

//     dom.style.color = "white";

// })

// 第二种写法:

// 普通数组

var arr = ["red","green","blue","purple","yellow"];

// 作用:循环任意数组

// 调用者: $  jquery函数

$.each(arr,function(index,item){

    // console.log(index,item);

    $(".btn").eq(index).css("backgroundColor",item);

})



6.关于jq拓展的方法

这里就像在原型上挂自定义方法一样,jq作为一个函数库,一样可以在jq对象或者函数本身上挂自定义方法,区别就是调用者不同。

// 调用者:jquery对象

// 拓展一个bgcolor方法,专门改变元素背景色

// $(".box").bgcolor("red")

// $.fn.extend({

//     bgcolor: function(bgc){

//         $(this).css("backgroundColor",bgc);

//     }

// })

// $(".box-1").bgcolor("red");


$.fn.bgcolor = function (bgc) {

    // $(this) 是这个方法的调用者

    $(this).css("backgroundColor", bgc);

}

// 分别改变了以下div的背景色

$(".box-1").bgcolor("green");

$(".box-2").bgcolor("orange"); 

$(".box-3").bgcolor("purple");

// 调用者:$函数

        // 拓展getRandom方法,获取随机数

        // 一种写法:

        // $.extend({

        //     getRandom: function(min,max){

        //         return Math.floor(Math.random()*(max-min)+min);

        //     }

        // })

        // console.log($.getRandom(50,80));

        // 换种写法:

        $.getRandom =  function(min,max){

            return Math.floor(Math.random()*(max-min)+min)

        }

         console.log($.getRandom(50,80));

这里有两个案例,分别为满屏滚动插件的封装和瀑布流的封装,这里暂且不写,会专门额外写一篇文章介绍

另外再分享一首歌《终章》--Assen捷&橙翼

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容