jQuery 基础

jQuery

大多数函数支持链式操作 一个主语执行完一个函数后 这个函数又返回该主语 可以继续用点接着执行其它函数

查找

            1.按选择器
				$(...)支持所有css选择器
				css中没有的,jQuery添加的
					基本过滤:先将所有元素收集到一个结果集合中统一编号,再选择集合中指定位置的元素,和元素在其父元素下的位置无关
						first-child vs first
					内容过滤:3种
						1.按包含的文本内容过滤
							:contains(text) 查找内容中包含指定text文本的元素
						2.按子元素特征过滤
							:has(selector) 查找内容中包含符合selector要求的子元素的父元素
						3.按是否包含内容过滤
							:empty 空元素
							:parent 非空的元素
					可见性过滤:
						:hidden 只能选中两种情况的隐藏
							1.display: none
							2.input type=hidden
						:visible
					状态过滤:三大状态 :disabled :checked :selected
					表单元素过滤:
						:input 可以选择四大类表单元素 input、button、textarea、selected
						:[type] 每种input都对应一种专门的选择器
							:text :password :checkbox :radio

			2.按节点间关系
				父元素 .parentNode => .parent()
				直接子元素 .children => .children()
                    查找父元素下符合条件的子元素:
						.children(['selector']) 只能找直接子元素
						.find('selector') 在所有后代中查找
				第一个子元素 .firstElementChild => .children().first()
				最后一个子元素 .lastElementChild => .children().last()
				前一个兄弟 .previousElementSibling => .prev()
												   .prevAll()
				后一个兄弟 .nextElementSibling => .next()
											     .nextAll()
				除我之外,所有兄弟 .siblings([selector])

修改:一个函数两用(get、set)

            内容
				.innerHTML   => .html()
				.textContent => .text()
				.value       => .val()
			属性
                标准属性
					elem.属性名 => $elem.attr('属性名'[,值])
				状态属性
					elem.属性名 => $elem.prop('状态属性'[,bool])
				自定义扩展属性
					elem.dataset.属性名 => $elem.data('属性名'[,值])
			样式
				修改内联样式
				1.仅修改一个css属性
					.style.css属性=值 => .css('css 属性名'[,值])
				2.批量修改多个css属性
					.css({
						'css 属性名': 值,
						...: ...
					})

批量修改

        用class批量修改样式
				1.为元素追加一个class
					$(...).addClass('class 名')
				2.为元素移除一个class
					$(...).removeClass('class 名')
				3.判断是否包含一个class
					$(...).hasClass('class 名')
				4.为元素切换一个class
					$(...).toggleClass('class 名')
				补充:
					.index()
					1.let i = $('selector').index(jq 对象/DOM 对象);
						查找右边的jq对象或者DOM对象在左边的集合中的下标位置
					2.如果在同一个父元素下找某个子元素的位置
						let i = $(child).index();

添加

            1.用$()创建一个新元素:let $新元素 = $('html 片段')
			2.将新元素添加到dom树:
				$('parent').append($新元素);
					       .prepend($新元素);

				$('child').before($新元素);
						  .after($新元素);
				可以更简化:$('parent').append/prepend('html片段');
							$('child').before/after('html片段');

删除/替换/克隆

        删除:
			$(...).remove();

		替换:
			$('selector').replaceWith(jq 对象|DOM 对象);
		
		克隆:
			let $cloneElem = $('selector').clone();
			强调:浅克隆:仅克隆样式和属性,不克隆行为,clone()
				  深克隆:既克隆样式和属性,又克隆行为,clone(true)

事件绑定

        jQuery中共有几种事件绑定方式?区别
			DOM:.addEventListener('事件名', handler)
				.removeEventListener(...)
			jq:
				1.$(target).bind/unbind(),同.addEventListener('事件名', handler)
					.unbind()三种重载:
						.unbind('事件名', handler)移除当前元素上,指定事件上的名为handler的处理函数
						.unbind('事件名')移除当前元素上,指定事件上的所有处理函数
						.unbind()移除当前元素上,所有事件的监听
				2.$(target).one('事件名', handler)同bind
					区别:只触发一次,触发后自动解绑
				3.live/die('事件名', handler)--已废弃
					原理:将所有事件集中绑定在顶级document上
				4.$(parent).delegate('selector', '事件名', handler)	
					原理:简化利用冒泡
					1.获得目标元素:this->e.target
					2.筛选目标元素:第一个参数 selector
						只有满足selector要求的元素才能触发事件
					bind vs delegate
					1.bind直接绑定在目标元素上
					  delegate绑定在父元素上
					2.监听个数
						bind:监听个数多--每个目标元素都添加
						delegate:监听个数少--只给父元素添加
					3.新增子元素自动获得事件处理函数
						.bind只能对现有元素添加事件监听
							 新增元素无法自动获得监听
						.delegate
							只要父元素下的元素,无论是现有,还是新增,都能自动获得父元素上统一的事件监听
				5.on/off
					1.代替bind,on('事件名', handler),同bind
					2.代替delegate,on('事件名', 'selector', handler),同delegate
				6.事件名
					强调:仅对常用的事件提供了终极简化

页面加载后执行:2种

            1.DOMContentLoaded:仅DOM内容加载完,就可提前执行
				DOM内容仅包括html,js
				提前触发
				何时:只要不依赖与css和图片的所有操作都可在DOM内容加载后,提前触发
					  比如:事件绑定
				jq:
					$(document).ready(function(){
						// DOM内容加载后,就可执行的操作
						// 比如:事件绑定
					});
					简化:$(()=>{...})
			2.window.onload()在所有页面内容加载完成后自动触发
				包括:html,css,js,图片
				何时:如果js代码必须依赖css或图片才能执行时

模拟触发:

        虽然没有触发事件,但是依然可用程序模拟执行元素的事件处理函数
			$(...).trigger('事件名');
posted @ 2019-08-25 22:48  $debug  阅读(389)  评论(0编辑  收藏  举报