Jquery学习笔记
一.js选择器
document.getElementById();//一个元素 document.getElementsByClassName();//HTMLCollection元素集合 document.getElementsByName();//NodeList节点的集合 document.getElementsByTagNameNS(); //htmlCollection元素的集合 //说明:元素集合是节点集合的一个子集 document.querySelector();//选择符合匹配的第一个节点 document.querySelectorAll();//选择符合匹配的所有元素节点的集合
二.jquery中的选择器
var element1=$('#div1,#div2');//得到一个一个类数组的JQUERY对象
1.类数组变成数组
element1 = Array.prototype.slice.call(element1);
2.基本的选择器
$('#p1') $('.list') $('.lise>li') $('a[href="http://www.baidu.com"]') $('a[href*="www"]') $('a[href^="http"]') $('a[$="com"]') $('a[href][trget]') $('a[href!="http://www.baidu.com"]')//jquer独有的css没有的
3.位置筛选器
:first//首个 :last//最后一个 :even//偶数0,2,4···· :odd//奇数1,3,5....... :eq(n)//等于n :gt(n)//大于n :lt(n)//小于n
4.子元素筛选器
$('li:first-child') :first-child :last-child :first-ot-type :last-of-type :nth-child(1)//1,2,3......... :nth-last-child(2n) :nth-of-type() :nth-last-of-type() :only-child :only-of-type
5.表单筛选器
$('input:checkd') :checked :disabled :enabled :focus :button :checkbox :File :image :input :password :radio :reset :selected :submit :text
6.内容选择器
$(':empty') :empty//内容为空的元素css :contains(text)//包含某文本的元素 :has(select)//匹配某选择器的元素 :parent//包含子元素或文本元素的元素. //其他筛选器 //jquery特有的 :lang(languaage) :not(select) :root :target //jquery and css :hidden//不可见元素 :visible//可见元素 :header//标题元素 :animated//执行动画的元素
三.jquery选择器的性能优化
1.尽量使用css中有的选择器 2.避免过度约束 3.尽量id开头 4.尽量使选择器右面更精确 5.避免过度使用全局选择器 6.缓存选择器结果 logTime(function(){code});//打印执行code代码用时到控制台
四.jquery对象dom对象
1.检测
dom.nodeType->节点类型数量
jquery.jquery->版本号
2.转换
dom = jquerydom.get(index);或者dom=jquerydom[index]; jquerydom = $('dom');
五.创建html元素的两种方式
1.$('<a>',{ text:"baidu", href:"http://www.baidu", title:"baidu" }); 2.$('<a>baidu<a>').attr({ text:"baidu", href:"http://baidu.com", title:"baidu" }); //此时创建的html元素存在浏览器内存中为未加到页面中
六.从jquerydom集合中提取元素方式
jquerydom[index] 返回dom jquerydom.get(index) 返回dom jquerydom.eq(index) 返回jquerydom->$('li:eq(1)') jquerydom.first() 返回jquerydom jquerydom.last() 返回jquerydom //使用方法比筛选器选择器性能高 jquerydom.toArray() 返回一个dom对象的数组功能和不加参数的get()一样
七.通过关系查找元素
1.通过父子
jquerydom.parent(selector) 获取满足匹配的直接父元素
jquerydom.parents(selector) 获取满足匹配的所有祖先元素
jquerydom.closet(selector)从当前元素主机向上查找,返回最先匹配的元素,能获取到本身
jquerydom.children()所有子元素的集合五文本节点
jquerydom.contents() 所有子元素的集合包括文本节点
jquerydom.find() 所有后代元素的集合
2.通过兄弟关系
jquerydom.next('li') //下一个兄弟 jquerydom.nextAll('li') //后面的所有兄弟 jquerydom.nextUntill('li') //直到某个兄弟 erydom.prev('li') //前一个兄弟 jquerydom.prevAll('li') //前面的所有兄弟 jquerydom.prevUntill('li') //直到某个兄弟 erydom.siblings()//所有的同辈元素
八.筛选遍历jQuery对象
1.添加选择de对象
$('.item1, .item2')or $('.item1').add(".item2")
2.删除过滤对象
$('.item1, .item2').not('.item1');删除了.item1对象 $('.item1, .item2').not(function (index) { return $(this).hassClass(item1); }); $('.item1, .item2').filter('.item1'); 删除了除.item1对象外的其他对象 $('.item1, .item2').filter(function(index){ return $(this).hassClass(item1); });
3.关于二级菜单
$('li').has('ul'); //含有二级菜单的li
4.转换元素
$('li').slice(start, end);[start, end ) $('li').map(function(index,dom){ return this.id; });//返回的值仍然是jquerydom
5.遍历jquerydom
$('li').each(function(index,dom){ this.title=this.innerText; });
6.其他
$('li').is(selector); //li中至少一个符合匹配则返回true
九.特性和属性
1.获取设置
var dom=document.getElementById("dom1"); dom.atrributes()获取所有的特性 dom.getAttribute("style");获取style特性的值 (dom.setAttribute("style",{color:red})) dom.style获取style属性的值 特性的值总是字符串,属性的值不一定是字符串
2.特性属性的同步规则
1.attribute是dom对象中本来就存在的,特性属性的值同步 2.attribute是boolean类型的,不同步 3.attribute不是dom内建的,不同步
3.操作元素的特性attr
1.设置特性 jquerydom.attr('title') jquerydom.attr('title','baidu') jquerydom.attr({ title:"baidu" }) jquerydom.attr(function(index,previousvalue){ return "new" + previousvalue; }) 2.删除特性 jquerydom.removeAttr("attrname");
4.操作元素的prop
1.//设置属性 jquerydom.prop('title') jquerydom.prop('title', 'baidu') jquerydom.prop({ title: "baidu" })
5.特性属性总结
1.特性不区分大小写,属性区分大小写,dom中采用驼峰形式,jquery中采用全小写形式
2.特性一次可删除多个,属性一次只能删除一个
3.boolean类型尽量采用属性设置
6.在元素中存取数据
在dom上存取数据,直接设置在特性或属性可能会导致内存泄漏,影响浏览器性能 1.获取数据 jquerydom.data(name) 2.存数据 jquerydom.data(name, value) ; jquerydom.data({}); !!data方法设置的数据可以保留类型 3.检测dom是否存在数据 $.hasData(dom);
十.修改元素样式
jquerydom.addClass([name1,name2]);添加类 jquerydom.removeClass([name1, name2]);删除类 jquerydom.toggleClass(name,true / false);切换类 //应用实例 $('li').each(function(index){ $(this).toggleClass(".red",index%3===0); }); jquerydom.hasClass(name);检测类 //修改样式css jquerydom.css(name,value); jquerydom.css({ }); jquerydom.css(name,function(index,value){ return parseInt(value,10);//value带有单位px });
十一.尺寸
1.内容的尺寸 jquerydom.width() jquerydom.height() 第一个元素的尺寸 2.包含内边距 jquerydom.innerWidth(); jquerydom.innerHeight(); 3.包含内边距和边框 jquerydom.outerWidth(); jquerydom.outerHeight(); 4.包含内边距和边框和外边距 jquerydom.outerWidth(true); jquerydom.outerHeight(true);
十二.位置
1.元素在相对于document中的位置 第一元素有效,只对可见元素有效 jquerydom.offset() 返回{left:value top:value} 2.元素相对于最近的一个具有position:relative父元素的位置,如没有此父元素,则相对于document jquerydom.position(); 返回{left: value top: value} 3.滚动条位置 $(html).scrollTop(value) $(html).scrollLeft(value)
十二.获取设置元素内容
1.包含标签,只对集合中的第一个元素起作用 $('div.red').html(content); 2.纯文本 $('div.blue').text(content); 以上插入内容方法,会覆盖原来的内容,插入元素最好用append()方法。
十三.移动或插入元素
([content1,..]).appendTo(jquerydom); jquerydom.append([content1,..]);插入元素内部的最后 jquerydom.prepend([content1,..]);插入到元素内部的最前面 举例: $('li').append('<a href="#">阅读更多<a>'); jquerydom.after(content,[content1,..])元素之后插入内容 jquerydom.before(content,[content1,..])元素之前插入内容 //移动 jquerydom.append(selector); <div class="box"> <h1><h1> <ul> <p>loer rrsdxt fystfxcgf hcg</p> <li></li> <li></li> <li></li> <li></li> <ul> </div> $('ul').append($('h1'));将h1移动到ul内部的最后;
十四.包裹元素
$('li').wrap('<div class="box2"></div>');将每个li用div包裹起来 $('li').wrap($('h1'));将h1元素复制然后包裹每个li $('li').wrapAll($('h1'));将所有的li包裹在一个h1对象中 $('p').wrapInner('<div></div>');用div包裹p中文本的内容 $('p').unwrap('<div></div>');取消包裹,删除直接的父元素
十五.删除元素
jquerydom.remove();从页面上将该对象删除,删除该对象绑定的事件和附加的数据,但仍存在浏览器jquery对象集合中
jquerydom.detach();从页面上将该对象删除,保留对象绑定的事件附加的数据,仍存在浏览器jquery对象集合中
jquerydom.empty();只删除内容,不删除该元素,保留时间及数据
十六.复制
jquerydom.clone([event1[,deepEvent2]]) event1是否复制本身的数据及绑定的事件 event2是否复制其子元素的数据及绑定的事件 案例:$('item1').clone(true,true).appendTo('.item2');
十七.替换元素
replaceWith(content) $('h1').replaceWith('<h2>h2</h2>'); replaceAll(conyent) ('<h2>h2</h2>').replaceAll('h1');
十八.这些方法为破坏性方法,在使用链式语法时需要先用end()方法恢复。
appendTo(target)
prependTo(target)
insertBefore(target)
insertAfter(target)
replaceAll(target)
十九.处理表单元素的值
.val(value) 1.获取单选框的值 $('input[type="radio"]:checked').val(); 2.获取复选框的值 val()方法只返回元素集合中第一个元素的值,所以多选框值在同时选中多个选项时需要遍历 var value=$('input[type="checkbox"]:checked').map(function(index.obj){ return $(this).val(); }).toArray();
二十.DOM事件模型
1.DOM0级事件模型
onclick dom0级事件<div onclick="chnageimg()"></div> dom.onclick=function(){}; 只支持一个dom事件处理函数,后加的函数会覆盖掉前一个函数 考虑到兼容性: dom.onclick=function(event){ event=event||window.event;获取事件对象 target=event.target||event.srcElement;获取事件目标 } //事件冒泡 元素在触发事件时,回依次向上触发父元素的上的相同的事件 阻止事件冒泡的方法event.stopPropagation(); or event.cancelBubble = true;
2.DOM2级事件模型
//事件的捕获 事件会从该元素到其子元素依次进行触发 addEventListener(eventType,listener,useCapture) useCapture=false时,只触发事件冒泡机制 useCapture=true时,只触发事件捕获机制 dom.addEventListener('click',function(event){ },true);
二十一.Jquery事件模型
1.提供了统一的事件处理方法 2.允许添加多个事件处理函数 3.使用标准事件名称(不加on) 4.事件实例作为事件处理函数的第一个参数 5.标准化事件实例最常用的属性 6.提供了统一的事件取消和阻止默认行为的方法
1.添加事件处理函数
jquerydom.on(eventType,selector,data,function); 实例: $('div').on('click','div#name',{foo:'bar'},function(event){ console.log(event.data); }).on('mouseover',function(event){ });
2.事件的委托
<ul> li*300 </ul> 给300个li绑定点击事件 可以将事件委托给父元素ul,给ul绑定点击事件即可 $('ul').on('click',function(event){ 通过event.target来获取被点击的li元素 });
3.统一的方法和属性
event.stopPropagation()阻止事件冒泡 event.preventDefault()阻止默认行为 return false;同时阻止冒泡和默认行为
5.一次性处理函数
jquerydom.one(eventType,selector,data,function);
6.移除事件处理
jquerydom.off([eventType,],[selector,],function);
7.主动触发事件
1.使用方法触发 jquerydom.trigger(eventType,[,data]); jquerydom.triggerHandler(eventType,[,data]); !!triggerHandler和trigger相比 1.不会触发浏览器默认事件 2.不会产生事件,冒泡 3.只触发对象集合中第一元素的事件处理函数 4.返回的是事件处理函数的返回值,不是jQuery对象 2.触发快捷方法 jquerydom.eventType();不传参数就可以主动触发 例: $('ul').click(); // jquerydom.hover()方法,拥有mouseout和mouseenter的综合功能
8.自定义事件
使用on()+trigger(); //标记该条已读 $('li').on('markAsRead',function(event){ console.log('已读%o'+$(this)); }).on('click',function(event){ $(this).trigger('markAsRead'); }); //全部标记已读 $('button').on("click",function(event){ $('li').trigger('markAsRead'); }); //事件命名空间
9.关于jquey插件
1.去jquery官方插件主页搜索 网址:http://plugins.jquery.com/ 2.去npm搜索 3.github上搜索 //通过cdn引入插件效果最好 http://www.bootcdn.cn/ //几个实用的插件 1.chosen选择框 https://github.com/harvesthq/chosen 2.pickdate日期选择输入 https://github.com/amsul/pickadate.js 3.Magnific-Popup点击图片弹出放大 https://github.com/dimsemenov/Magnific-popup