jQuery简介

83 阅读5分钟

JS获取用户输入

普通数据(输入、选择):
elementNode.value
适用于以下标签:
input		select		textarea
    eg:var iEle = document.getElementById("i1")
    console.log(iEle.value)

文件数据(上传文件):
elementNode.files
elementNode.files[0]
适用于用户上传file

JS类属性操作

标签对象.classList

classList.remove(cls)		删除指定类
classList.add(cls)			添加类
classList.contains(cls)		 存在返回true,否则返回false
classList.toggle(cls)		 存在就删除,否则添加

JS样式操作

语法:obj.style.属性名
eg:
	obj.style.margin
	obj.style.maginTop 	//	对于中间含横线的属性(magin-top),去掉横线,并将横线后第一个字母换成大写

事件

1.概念:事件可以理解为给html绑定了一些额外的功能,例如点击某个HTML元素之后触发某一段js代码的运行。 2.常用事件

事件描述
onclick当用户单击某个对象时调用
ondbclick双击某个对象
onfocus元素获得焦点
onblur元素失去焦点
onchange域的内容被改变
onkeydown某个按键按键被按下
onkeypress某个键盘按键被按下并松开
onkeyup某个键盘按键被松开
onload一张页面或图片完成加载
onmousemove鼠标移动
onmousedown鼠标按钮按下
onmouseover鼠标移到某个元素之上
onselect文本框的文本被选中
onsubmit确认按钮被点击,仅作用域form
3.绑定事件的两种方式
	<input type="button" value="点我" ondblclick="func1()">
    <button id="d1">按我</button>
	<script>
        //	第一种:提前写好函数  标签内部指定
		function func1(){
        	alert(123)
    	}
		//	第二种:先查找标签再批量指定
		let btnEle = document.getElementById('d1')
         btnEle.onclick = function(){
             alert(123)
         }
    </script>
4.事件中的关键字this
	let btnEle = document.getElementById('d1')
    btnEle.onclick = function(){
    	alert(123)
		console.log(this)
		//	this指代的是当前被操作的对象  类似于面向对象self
    }
5.等待HTML文档加载完毕之后再执行一些代码
	window.onload = function(){
        页面js代码
		// 此方法可以让script标签写在head标签内,而且后于html代码渲染。
    }

JS事件案例(定时器)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<input type="text" id="i1">
<button id="b1">开始</button>
<button id="b2">结束</button>

<script>
    var t;
    function showTime() {
        var i1Ele = document.getElementById('i1');
        var time = new Date();
        i1Ele.value = time.toLocaleString();
    }
    showTime();
    var b1Ele = document.getElementById('b1');
    b1Ele.onclick = function (ev) {
        if (!t){
            t = setInterval(showTime,1000)
        }
    };
    var b2Ele = document.getElementById('b2');
    b2Ele.onclick = function (ev) {
       clearInterval(t);
       t = undefined
    };

</script>
</body>
</html>

jQuery类库

概念:兼容多浏览器的JavaScript库(本质是一份js文件)
极大地简化了js编程。
注意使用JQuery必须先导入
	1.在项目文件夹中复制一份JQuery文件
	2.或者在head标签中导入JQuery文件的CDN链接(bootcdn)
	https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js

5.png

jQuery基本使用

$()		本质是		jQuery()

1.jQuery对象:
jQuery对象就是通过jQuery包装DOM对象后产生的对象。
	$("#i1").html()	的意思是:获取id为i1的元素的html代码,其中.html()是jQuery里的方法。等同于js里的:
	document.getElementById("i1").innerHTML;
虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。
我们在声明一个jQuery对象变量的时候在前面加上"$"
2.基础语法
	$(selector).action()
3.选择器
	id选择器
		$("#id")
	标签选择器
		$("tagname")
	类选择器
		$(".className")
	配合使用
		$("div.c1")		//	找到有cl class类的div标签
	组合选择器
    	$("#id, .className, tagName")
	层级选择器
		x和y可以是任何选择器
		$("x y")	//x的所有后代y
		$("x > y")	//x的所有儿子y
		$("x + y")	//找到所有紧挨在x后面的y
		$("x ~ y")	//x之后所有的兄弟y
4.jQuery选择器查找标签之后的结果与js有何区别
    1.如果使用索引取值 那么都是标签对象
    	标签对象是无法调用jQuery提供的方法的
    2.标签对象如果想转换成jQuery对象需要使用 $()
    	转换成jQuery对象的目的是为了使用jQuery提供的更多方法

基本选择器

:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)

eg:
$("div:has(h1)")// 找到所有后代中有h1标签的div标签
$("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签

表单选择器

可以看成是属性选择器优化而来
注意:$(':checked')  
	$('input:checked')  
  
:text
:password
:file
:radio
:checkbox

:submit
:reset
:button
    
:enabled
:disabled
:checked
:selected

eg:$(":checkbox")  // 找到所有的checkbox

定时器案例

有一个input框 两个按钮 一个开始 一个结束
1.点击开始按钮 input内展示当前时间并按秒数刷新
2.点击结束按钮 input内展示停止
ps:写完之后测试有无bug 连续多次点击开始按钮 再试试能不能结束
	思考如何解决
         
<script>
  //获取三个对象
  let i1Ele = document.getElementById('i1')
  let b1Ele = document.getElementById('b1')
  let b2Ele = document.getElementById('b2')
  //将存储循环定时任务的变量定义为全局变量
  let t = null;
  //将展示时间的代码封装成函数
  function showTime() {
    //获取当前时间
    let currentTimeObj = new Date()
    //转换成格式化时间
    //将格式化时间展示到input框中
    i1Ele.value = currentTimeObj.toLocaleTimeString()
  }
  //绑定点击事件
  b1Ele.onclick = function () {
      //循环任务:每隔一秒获取一次当前时间
      if(!t){
          t = setInterval(showTime, 1000)
      }
  }
  b2Ele.onclick = function () {
      //结束循环任务
      clearInterval(t)
      t = null
  }
</script>

筛选器方法

下一个元素:
$("#id").next()
$("#id").nextAll()
$("#id").nextUntil("#i2")

上一个元素:
$("#id").prev()
$("#id").prevAll()
$("#id").prevUntil("#i2")

父亲元素:
$("#id").parent()
$("#id").parents()  // 查找当前元素的所有的父辈元素
$("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。

儿子和兄弟元素:
$("#id").children();// 儿子们
$("#id").siblings();// 兄弟们

'链式操作的顶层原理:对象每次调用方法之后都会返回一个对象,这个对象也可以调用原来对象拥有的功能'

操作标签

  jQuery操作				js操作				效果
  
addClass()			classList.add()			添加指定的css类名
removeClass()		        classList.remove()		移除类名
hasClass()		        classList.contains()	        判断样式存不存在
toggleClass()		        classList.toggle()	        css类名有就移除没有添加

.css('样式名','值')             style.样式名='值'		 操作css样式

text()				innerText()			文本操作
html()				innerHTML()			文本操作
val()				value				value值
[0].files			files				文件操作

attr()				setAttrbute()			静态属性
				getAttrbute()
prop()								动态变换(checked)

append()			append()
prepend()
after()
before()

remove()										移除标签
empty()											清空标签

jQuery绑定事件

JS绑定事件
    标签对象.on事件名 = function(){事件代码}
        例如:btnEle.onclick = function(){alert(123)}

jQuery绑定事件
    方式1:jQuery对象.事件名(function(){事件代码})
        例如:$btnEle.click(function(){alert(123)})
    方式2:jQuery对象.on('事件名',function(){事件代码})
        例如:$btnEle.on('click',function(){alert(123)})
    有时候使用jQuery的方式1绑定事件如果无法触发 可以切换为方式2

阻止事件后续

能够触发form表单提交数据动作的标签有两个
    <input type='submit'>
    <button></button>
这两个标签自带点击提交事件
给已经有事件的标签绑定事件,会优先执行绑定的事件,再去执行自带的事件
我们也可以让标签自带的事件不执行:
    return false  或者
    e.preventDefault()
$(':submit').click(function(e)){
    alert('111222333')
    // return false	方式1
    e.preventDefault() //方式2
}

事件冒炮

如果子元素有的事件 父元素也有 那么子元素事件执行的时候,会一次向上反馈并执行父元素的相同事件。
阻止事件冒炮:
$("span").click(function(e)){
    alert("span");
    // return false;  方式1
    e.stopPropagation()		// 方式2
}

事件委托

创建标签的两种方式:
    JSdocument.createElement()
    jQuery:		 $('<标签名>')

事件绑定默认情况下是不会对动态创建的标签生效的,如果想生效需要事件委托

$('div').on('click','button',function () {
	alert('123123123')
})
上述方式可以解决动态标签事件的执行问题(注意事件委托指的是标签内部的标签)