JQuery常用方法
一、工具类方法
1.1 $.extend()
- 概述:
用一个或多个其它对象来扩展一个对象,返回被扩展的对象
var obj1 = {name:'Jerry',age:24,score:90};
var obj2 = {name:'Tom',age:20,sex:'man'};
var a = $.extend({},obj1,obj2);
console.log(a);// -> obj2会覆盖obj1相同的 {name: "Tom", age: 20, score: 90, sex: "man"}
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var a1 = $.extend({},settings,options);
console.log(a1); // -> {validate: true, limit: 5, name: "bar"}
1.2 $.grep()
- 概述:
使用过滤函数过滤数组元素
// -> 此函数返回一个Boolean值
// n -> 待过滤数组
// i -> 元素索引值
var g = $.grep([0,1,2,3],function(n,i){
return n > 0;
});
console.log(g);// [1,2,3]
// -> 第三个参数为true,则返回函数中为false的元素集
var g1 = $.grep([0,1,2,3],function(n,i){
return n > 0;
},true);
console.log(g1);// [0]
1.3 $.makeArray()
- 概述:
将类数组转换为数组
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
var oList = document.getElementsByTagName('li');
var b = $.makeArray(oList);
console.log(b);// -> [li, li, li]
1.4 $.map()
- 概述:
将一个数组中的元素转换到另一个数组中
// n - 表示数组元素
// 此方法可返回任何值
var m = $.map([1,2,3],function(n){
return n + 4;
});
console.log(m);// [5,6,7]
1.5 $.inArray(value,array,fromIndex)
- 概述:
确定第一个参数在数组中的位置,从0开始计数,如果没有找到默认是返回-1
// -> value 用于在数组中查找是否存在的值
// -> array 待处理数组
// -> fromIndex 从第几索引开始搜索
var arr = ['1','Jerry',3,'Tom',9];
console.log($.inArray('Jerry',arr));//1
console.log($.inArray('Pete',arr,2));//-1
1.6 $.merge()
- 概述:
合并两个数组成一个新数组
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var d = $.merge(arr1,arr2);
console.log(d);// [1,2,3,4,5,6]
1.7 $.unique()
- 概述:
删除数组中重复元素
var o = [1,2,3,3,4,4,5,6,6,7,7,7,8,9];
var o1 = $.unique(o);
console.log(o1);// [1, 2, 3, 4, 5, 6, 7, 8, 9]
1.8 $.contains()
- 概述:
检测一个元素是否包含另一个元素
console.log($.contains(document.documentElement,document.body));// true
1.9 $.type()
- 概述:
用于检测数据类型的
console.log($.type(true));// boolean
console.log($.type(3)); // number
// -> 扩展:
// -> $.isArray() 用于检测是否是数组对象
console.log($.isArray([])); // true
// -> $.isFunction() 用于检测是否为函数
console.log($.isFunction(function(){})); // true
// -> $.isEmptyObject() 用于检测是否是空对象
console.log($.isEmptyObject({}));//true
// -> $.isPlainObject() 用于检测是否是纯粹的对象(通过new Object或者{}创建的)
console.log($.isPlainObject(new Object()));// true
1.10 $.trim()
- 概述:
去掉首尾空格
var str = ' JerryTom ';
var f = $.trim(str);
console.log(f);// JerryTom
1.11 $.param()
- 概述:
将表单元素或者数组序列化
var p = {width:160,height:280};
var g = $.param(p);
console.log(g); // width=160&height=280
二、核心方法
2.1 get([index])
概述:
通过索引取得匹配的DOM集合对其操作,而不是通过JQ函数
理解:
$(this).get(0)
<=>$(this)[0]
console.log($("img").get(0).getAttribute('src'));// get获取到的是原生DOM集合,但是eq()方法,获取的是JQ元素
2.2 index([empty]||[selector])
- 概述:
搜索匹配的元素,并返回相应元素的索引值
<ul id="list">
<li>1</li>
<li id="bar">2</li>
<li>3</li>
</ul>
// -> index() 不传递参数,返回值就是第一个元素相对于其同辈元素的位置
console.log($("#bar").index());//1
// -> index([selector]) 如果传递一个选择器,则表示从这个对象中查找元素,并返回索引位置;如果找不到就返回-1
console.log($("li").index($("#bar")));//1
2.3 $.fn.extend()
- 概述:
扩展jQ元素来提供新的方法
$.fn.extend({
check:function(){
},
unCheck:function(){
}
});
$('input').check();
2.4 $.extend()
- 概述:
扩展JQ对象本身(也就是说在命名空间上增加函数)
$.extend({
min:function(a,b){
return a < b ? a : b;
}
});
$.min(2,3);
三、JQ中的Each方法
JQ中的each有三种:
(1)写在
原型上的each
-> 遍历jQ对象中的每一项(2)写在
对象上的each
-> 工具方法,可以用来遍历数组、类数组、对象等(3)内置的each -> 其实也是调用原型上的each处理的,只不过JQ在处理的时候会内部自己调用
// -> 内置each
$("a").addClass('select');//-> 我们获取的a可能有很多个,执行一次addClass,相当于给每一个获取的a都增加了一个叫做select的样式类(JQ中大部分方法在执行的时候,都会把获取的JQ集合中的每一项调用each进行遍历,把需要操作的任务对每一个遍历的元素进行操作)
$("a").css('width');//->获取的时候只返回第一个元素的样式(设置走内置each批量处理,获取只处理第一个)
// -> 原型上的each
$("a").each(function(index,item){
// -> 传递参数的顺序和数组内置的forEach顺序相反,数组内置的[Array].forEach((item,index)=>{})
// -> 获取的a有多少个,回调函数被触发执行多少次
// -> index 为当前这一项的索引 | item 是当前这一项的内容
// -> this 是 item,是一个JS原生对象
// -> $(this) 也是当前遍历的这一项,但是属于JQ对象
});
// -> 对象上的each
$.each(Array/likeArray/Object,function(index,item){
});
四、属性方法
4.1 attr()
- 概述:
设置或者返回被选元素的属性值
// -> 情况1:参数name
var a = $("#box").attr("id");
console.log(a);// box
// -> 情况2:参数properties
$("img").attr({
"src":"2.jpg",
"alt":"123"
});
// -> 情况3:key/value
$("img").attr("src","3.png");
// -> 情况4:参数key,回调函数
$("img").attr('data-src',function(i,n){
console.log(i);// 0 -> 索引
console.log(n);// 4.jpg -> 原先的属性值
return this.src;
});
4.2 prop()
概述:
获取在匹配的元素集中的第一个元素的属性值
值得注意的是:
prop用法基本和attr一致,但是prop一般处理表单元素居多
console.log($("input[type=checkbox]").prop('checked'));
// -> 禁用名字叫szr的checkbox
$("input[name=szr]").prop({
disabled:true
});
// -> 禁用和选中页面上名字叫tom的复选框
$("input[name=tom]").prop("disabled",true);
$("input[name=tom]").prop("checked",true);
// -> 通过函数的形式来设置页面上所有名字叫green的复选框被选中
$("input[name=green]").prop('checked',function(i,val){
// val -> 表示原先的属性值
// i -> 表示索引值
return !val;
});
4.3 类名操作 addClass()/removeClass()/toggleClass()
4.3.1 addClass() / removeClass()
- 概述:
为每个匹配的元素 添加 / 移除 指定的类名
// -> 添加一个或者多个类名,中间需要用空格分隔
$("#box").addClass("sel");
$("#box").addClass("sel desc");
// -> 给li元素添加不同的类名
$("#list li").addClass(function(i,c){
// i -> 表示索引值
// c -> 表示原来的类名
return 'item' + i;
});
// removeClass() 用法与addClass()一致
4.3.2 toggleClass()
- 概述:
如果存在(不存在)就删除(添加)一个类
.r{color:red;}
<div id="s">1111111</div>
$("#s").on('click',function(){
$(this).toggleClass('r',false);
// $(this).toggleClass('r',true);// -> 最后的boolean值是用来判断是添加还是移除
});
4.4 html() / text()
- 概述:
取得第一个匹配元素的html内容
/取得所有匹配元素的内容
<p>1111111111111111111111111111111</p>
// -> 获取内容
var c = $("p").html();
console.log(c);// 1111111111111111111111111111111
// -> 设置内容
$("p").html(123);
// -> 接收一个函数
$("p").html(function(i,h){
return '~~~'+h; // ~~~123
});
// -> text()用法和html()大体一致
4.5 val()
获得匹配元素的当前值
<input type="text" value="45666">
<input type="text" value="1" id="input2">
<input type="checkbox" name="d" value="ck1">
<input type="checkbox" name="d" value="ck2">
var d = $("#input1").val();
console.log(d); // 45666
$("#input2").val(function(i,v){
// i -> 表示索引值
// v -> 表示原先的value值
return v + 'Jerry'; // 1Jerry
});
// -> ["value1","value2"]
var h = $("input[name=d]").val(["ck1","ck2"]);
console.log($.makeArray(h));
五、CSS方法
5.1 css()
- 概述:
访问匹配元素的样式属性
<p id="p1">123</p>
// -> 获取值
console.log($("#p1").css('color'));
// -> 设置值
$("#p1").css('color','red'); // 设置
$("#p1").css({
'background-color':'blue',
'font-size':'18px'
});
// -> 接收一个回调
// -> index 表示索引值 ; value 表示原先的属性值
$("#p1").css({
width:function(index,value){
return parseFloat(value) * 1;
},
height:function(index,value){
return parseFloat(value) * 1;
}
});
5.2 offset()
- 概述:
获取匹配元素在当前视口的相对偏移
<div id="box"></div>
#box{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
top: 100px;
left: 200px;
}
// -> 返回的对象包含两个整型属性 'left' 、 'top',以像素计,只对可见元素有效
console.log($("#box").offset().top);//100
console.log($("#box").offset().left);//200
$("#box").offset(function(index,old){
console.log(old);// Object {left:200,top:100} -> 接收选择器的当前坐标
return {left:old.left + 100,top:old.top + 100}; // -> 返回新的坐标
});
console.log($("#box").offset().top);//200
console.log($("#box").offset().left);//300
5.3 position()
- 概述:
获取匹配元素相对父元素的偏移,也是返回left和top,只对可见元素有效
// -> 父级是body,故和offset()的值相同
console.log($("#box").position().top);//100
console.log($("#box").position().left);//200
5.4 scrollTop() / Left()
- 概述:
获取匹配元素相对于滚动条顶部 / 左侧的偏移
// -> 此方法对可见元素和隐藏元素均有效
console.log($("#box").scrollTop()); //0
// -> 设置相对于滚动条顶部的偏移
$("#box").scrollTop(300);
5.5 width() / height()
- 概述:
取得匹配元素当前计算的高度值
// -> 获取宽高值(无单位)
console.log($("#box").width());// 100
// -> 设置宽高值
$("#box").height(400);
// -> 接收一个函数
$("#box").width(function(index,val){
console.log(val); // 100
return val * 3; // 此时新的宽度就是原先值的3倍了
})
5.6 innerWidth() / innerHeight()
- 概述:
获取匹配元素内部区域宽高度,包括补白但是不包括边框,对可见元素和隐藏元素均有效
console.log($("#box").innerWidth());// 如果加上padding的话就是 width + padding的值
5.7 outerWidth() / outerHeight()
- 概述:
获取匹配元素外部宽高度,默认情况下包括补白和边框
// -> 实例与上一个没有什么不同,但是此方法中会有一个参数,是一个boolean值
// -> 如果加上true,则会把边距计算在内
$("#box").outerWidth(true);
六、选择器
6.1 :eq
- 概述:
匹配一个给定索引值的元素
console.log($("li:eq(1)")); // -> 注意不能在选择器后面加,只能在元素后加
6.2 :gt / :lt
- 概述:
匹配所有 大于 / 小于 给定索引值的元素
console.log($("li:gt(0)"));
console.log($("li:lt(2)"));
6.3 :not / :checked / :selected
- 概述:
去除所有与给定选择器匹配的元素
<input type="checkbox">
<input type="checkbox">
<input type="checkbox" checked>
<br/>
<select>
<option value="1">123</option>
<option value="2" selected="selected">456</option>
<option value="3">789</option>
</select>
// -> 需求:获取到所有未被选中的checkbox
console.log($("input:not(:checked)"));
// -> 需求:获取所有选中的被选中元素(但是不包括select中的option)
console.log($("input:checked"));
// -> 需求:匹配所有选中的option元素
console.log($("select option:selected"));
6.4 :input
- 概述:
匹配所有input、textarea、select、button的表单元素
console.log($(":input"));// -> 连type为hidden的也会获取到
七、筛选
7.1 eq()
- 概述:
eq([index]) 获取第n个JQ元素,[index]值可以为负数,意为倒数
console.log($("#plist p").eq(2)) //3
console.log($("#plist p").eq(-1)) //4
7.2 hasClass()
- 概述:
是否包含某个特定的类名
<div class="box">123</div>
console.log($("div").hasClass("box")); // -> 返回值是Boolean值
7.3 filter()
- 概述:
筛选出与指定表达式匹配的元素集合
<div id="plist">
<p>1</p>
<p class="s">2</p>
<p class="e">3</p>
<p>4</p>
</div>
// -> 需求:筛选出带有s,e类名的元素
console.log($("#plist p").filter(".s,.e"));
// -> filter函数还接收一个回调,并携带一个参数index
$("#plist p").filter(function(index){
console.log(index);// 0 1 2 3
})
7.4 children()
- 概述:
取得一个元素集合中每一个元素的所有子元素的元素集合
<ul class="level2">
<li>A</li>
<li>B
<ul class="level3">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</li>
<li>C</li>
</ul>
// -> children只考虑子元素而不考虑所有后代元素
// -> children方法的参数是可选的,用来过滤子元素
$(".level2").children().css("border",'1px solid green');
7.5 find()
- 概述:
取得正在处理元素的后代元素(也就是说是所有的下级元素)
// -> find方法的参数是必选的
$(".level2").find("li").css("border","2px solid red");
7.6 is()
概述:
根据选择器/DOM元素/JQ对象来检测匹配元素集合
如果有一个匹配就返回true,否则返回false
console.log($("#plist p").is("p"));//true
var a = $("#plist p").is(function(index){
return $(this).html() > 1;
});
if(a){
alert(1);
}
7.7 not()
- 概述:
删除与指定表达式匹配的元素
<div class="con">
<p>0000000000000</p>
<p class="selected">1111111111111</p>
</div>
// -> 里面传一个选择器或者DOM元素,更或者是一个回调函数
console.log($(".con p").not($(".selected")));
7.8 offsetParent()
- 概述:
返回父元素第一个position设为relative或者absolute的元素
<div id="box1">
<p class="p1">OffsetParent</p>
</div>
$(".p1").offsetParent().css("background", "red");
7.9 siblings()
- 概述:
用于筛选同辈元素
<p>123</p>
<div class="sib">Hello Siblings</div>
<p>456</p>
$(".sib").siblings().css("color","#f00");
八、文档处理
8.1 append()
概述:
向匹配元素内部追加内容【后追加】
,与之相反的是prepend()
,属于【前追加
】参数:
content
{String | Element} 要追加到目标中的内容callback
{Function(index, html)} 返回一个html字符串,index表示索引值,html表示原先的html值
<div id="box"></div>
$("#box").append('<span>123</span>')
$("#box").append(function(index, html) {
return html + '789';
})
8.2 appendTo()
- 概述:
(A)被追加(B)
$("<p>123</p>").appendTo($("#box"))
8.3 before() / after()
- 概述:
在匹配元素前/后插入内容
,类似append,被插入
是insertBefore/After()
九、效果
9.1 show() / hide() / toggle()
概念
:显示隐藏的匹配元素 / 隐藏显示的匹配元素 / 切换显示隐藏元素参数
<style>
#box {
width: 100px;
height: 100px;
background-color: #000;
}
</style>
<div id="box"></div>
<input type="button" value="显示" id="show">
<input type="button" value="隐藏" id="hide">
<input type="button" value="切换" id="toggle">
<script>
/*
参数:
1.speed 三种预定速度之一的字符串 'slow', 'normal', 'fast' 或者 表示动画时长的毫秒数 (1000)
2.easing 用来指定切换效果,默认是'swing', 可用参数 'linear'
3.fn 在动画完成时执行的函数,每个元素执行1次
*/
$("#show").click(function() {
$("#box").show('normal', 'linear', function() {
console.log(1);
});
});
$("#hide").click(function() {
$("#box").hide('normal', 'linear', function() {
console.log(2);
});
});
$("#toggle").click(function() {
$("#box").toggle('normal', 'linear', function() {
console.log(3);
});
});
</script>
9.2 slideDown() / slideUp() / slideToggle()
概念
:通过高度变化向下增大 / 向上减小 / 切换匹配元素的可见性参数
:与9.1方法参数一致
9.3 fadeIn() / fadeOut() / fadeToggle()
概念
:通过不透明度变化实现淡入效果 / 淡出效果 / 切换淡入和淡出参数
:与9.1方法参数一致
9.4 animate() / stop()
概念
:创建自定义动画 / 停止动画参数
:
<style>
#box {
width: 100px;
height: 100px;
background-color: #000;
}
</style>
<input type="button" value="动画" id="animate">
<input type="button" value="停止" id="stop">
<script>
/*
参数:
params {Object} 一组包含作为动画属性和终值的样式属性和及其值的集合
speed {String} 'slow','normal','fast'或者动画时长的毫秒值(1000)
easing {String} 'linear','swing'
fn {Function} 动画完成时执行的函数,每个元素执行1次
*/
$("#animate").click(function() {
$("#box").animate({
width: '800px'
}, 1000, 'linear', function() {
console.log(111);
});
});
$("#stop").click(function() {
$("#box").stop();
});
</script>