1、jquery
js库:即 library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画animate、hide、show,比如获取元素等…
jquery也是一个js库,其主要是用于快速地操作dom;
其他常见的js库还有:Prototype、YUI、Dojo、Ext JS、移动端的zepto等…其都是对原生jquery的封装;
1.1jquery的入口函数
在下载好jquery文件以并解压到相应文件夹后,在代码中将其引入;
然后写jq的入口函数(其后所有用到jquery的代码都需要卸载该函数中):
// 第一种: 简单易用。
$(function () {
... // 此处是页面 DOM 加载完成的入口
}) ;
// 第二种: 繁琐,但是也可以实现
$(document).ready(function(){
... // 此处是页面DOM加载完成的入口
});
- 等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成,jQuery 帮我们完成了封装;
- 相当于原生 js 中的 DOMContentLoaded;
- 不同于原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码;
- 更推荐使用第一种方式;
1.3jquery的顶级对象$
其实我们在使用jquery时,$是最常见的符号之一:
- $是 jQuery 的别称,在代码中可以使用 jQuery 代替,但一般为了方便,通常都直接使用 $ 。
- $是jQuery的顶级对象,相当于原生JavaScript中的 window。把元素利用$包装成jQuery对象,就可以调用jQuery 的方法
- 其实在后面$可以换成其他的变量代替(jquery多库共存)
<script>
$(function() {
// 让jquery 释放对$ 控制权 让用自己决定
var suibian = jQuery.noConflict();
console.log(suibian("span"));
})
</script>
1.4jquery对象与dom对象
我们之前进行操作都是获取dom对象后对其进行操作(其通过原生getElement…来获取);
这里若用jquery获得的则是jquery对象,其本质是利用
对
D
O
M
对
象
包
装
后
产
生
的
对
象
(
伪
数
组
形
式
存
储
)
(
其
通
过
对DOM 对象包装后产生的对象(伪数组形式存储)(其通过
对DOM对象包装后产生的对象(伪数组形式存储)(其通过(’’)来获取);
其中原生dom对象以及jquery之间是可以相互转换的(转换的目的是有时需要使用原生中的某些方法):
// 1.DOM对象转换成jQuery对象,方法只有一种
var box = document.getElementById('box'); // 获取DOM对象
var jQueryObject = $(box); // 把DOM对象转换为 jQuery 对象
// 2.jQuery 对象转换为 DOM 对象有两种方法:
// 2.1 jQuery对象[索引值]
var domObject1 = $('div')[0]
// 2.2 jQuery对象.get(索引值)
var domObject2 = $('div').get(0)
注意dom元素转jquery元素是不用引号的,如:$(box)
1.5jquery选择器
1.5.1基础选择器
$("选择器") // 里面选择器直接写 CSS 选择器即可,但是要加引号
1.5.2层级选择器
主要是:后代选择器以及子代选择器;
两类选择器基础案例如下所示:
<body>
<div>我是div</div>
<div class="nav">我是nav div</div>
<p>我是p</p>
<ul>
<li>我是ul 的</li>
<li>我是ul 的</li>
<li>我是ul 的</li>
</ul>
<script>
//所有jq代码都必须放在该函数中
$(function() {
console.log($(".nav"));
console.log($("ul li"));
})
</script>
</body>
1.5.3筛选选择器
在jq中选出来的元素一般是多个,所以我们可以通过筛选选择器选择我们所需的元素:
案例代码如下:
<body>
<ul>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
</ul>
<ol>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
</ol>
<script>
$(function() {
$("ul li:first").css("color", "red");
$("ul li:eq(2)").css("color", "blue");
$("ol li:odd").css("color", "skyblue");
$("ol li:even").css("color", "pink");
})
</script>
</body>
此外,除了筛选选择器外还有筛选方法以便我们获取元素的父子兄弟及特定要求的元素:
1.6jquery相关
1.6.1简单设置样式
这个一般只用于修改某些较少的样式,如果样式改变较多我们直接更换元素的类即可
$('div').css('属性', '值')
1.6.2排他思想
我们之前已经学过排他思想,通过给一个元素设置类而其它兄弟都移除类:
// 想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
$(this).css(“color”,”red”);
$(this).siblings(). css(“color”,””);
且以上两句代码可以通过链式编程合成为一句话:
$(this).css(“color”,”red”).siblings(). css(“color”,””)
1.6.3隐式迭代
在原生js中遍历元素都是通过循环来实现的,而jquery则方便得多:
// 遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
// 简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
$('div').hide(); // 页面中所有的div全部隐藏,不用循环操作
利用上面知识可以实现电商网页鼠标移动到相应盒子,其对应的展示盒子显示相应商品图片效果: 主要难点在于知道点了哪个盒子,然后将对应的图片进行展示;通过
$(this).index()
来获取按下的是哪个盒子,并将该值用来选择对应的展示eq(index)
1.7jquery样式操作
1.7.1通过css进行操作
只用于修改少量样式的情况:
// 1.参数只写属性名,则是返回属性值
var strColor = $(this).css('color');
// 2. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加引号,值如果是数字可以不用跟单位和引号
$(this).css(''color'', ''red'');
// 3. 参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开, 属性可以不用加引号
$(this).css({ "color":"white","font-size":"20px"});
1.7.2通过设置类来修改样式
// 1.添加类
$("div").addClass("current");
// 2.删除类
$("div").removeClass("current");
// 3.切换类,触发一次从无到有,再触发从有到无
$("div").toggleClass("current");
- 设置类样式方法比较适合样式多时操作,可以弥补css()的不足。
- 原生 JS 中 className 会覆盖元素原先里面的类名,jQuery 里面类操作只是对指定类进行操作,不影响原先的类名。
1.8jquery效果
注意jquery的动画会有排队效果,当鼠标操作很快时会出现效果滞后现象,所以同一组动画中触发下一动画前要将上一次的动画停止,stop(),如下:
1.8.1显示隐藏
显示隐藏常用的三个方法:show() / hide() / toggle() ;
注意以上方法虽然都有参数,但我们平时一般直接使用不带参数,案例如下:
<body>
<button>显示</button>
<button>隐藏</button>
<button>切换</button>
<div></div>
<script>
$(function() {
$("button").eq(0).click(function() {
$("div").show(1000, function() {
alert(1);
});
})
$("button").eq(1).click(function() {
$("div").hide(1000, function() {
alert(1);
});
})
$("button").eq(2).click(function() {
$("div").toggle(1000);
})
// 一般情况下,我们都不加参数直接显示隐藏就可以了
});
</script>
</body>
1.8.2滑入滑出效果
代码如下:
<body>
<button>下拉滑动</button>
<button>上拉滑动</button>
<button>切换滑动</button>
<div></div>
<script>
$(function() {
$("button").eq(0).click(function() {
// 下滑动 slideDown()
$("div").slideDown();
})
$("button").eq(1).click(function() {
// 上滑动 slideUp()
$("div").slideUp(500);
})
$("button").eq(2).click(function() {
// 滑动切换 slideToggle()
$("div").slideToggle(500);
});
});
</script>
</body>
1.8.3淡入淡出效果
这个是透明度朝着指定的透明度进行变化:
<body>
<button>淡入效果</button>
<button>淡出效果</button>
<button>淡入淡出切换</button>
<button>修改透明度</button>
<div></div>
<script>
$(function() {
$("button").eq(0).click(function() {
// 淡入 fadeIn()
$("div").fadeIn(1000);
})
$("button").eq(1).click(function() {
// 淡出 fadeOut()
$("div").fadeOut(1000);
})
$("button").eq(2).click(function() {
// 淡入淡出切换 fadeToggle()
$("div").fadeToggle(1000);
});
$("button").eq(3).click(function() {
// 修改透明度 fadeTo() 这个速度和透明度要必须写
$("div").fadeTo(1000, 0.5);
});
});
</script>
</body>
1.8.4自定义动画
代码如下:
<body>
<button>动起来</button>
<div></div>
<script>
$(function() {
$("button").click(function() {
$("div").animate({
left: 500,
top: 300,
opacity: .4,
width: 500
}, 500);
})
})
</script>
</body>
1.8.5jquery中的hover
hover([over,]out) // 其中over和out为两个函数
- over:鼠标移到元素上要触发的函数(相当于mouseenter)
- out:鼠标移出元素要触发的函数(相当于mouseleave)
- 如果只写一个函数,则鼠标经过和离开都会触发它
案例代码如下:
<body>
<ul class="nav">
<li>
<a href="#">微博</a>
<ul><li><a href="">私信</a></li><li><a href="">评论</a></li><li><a href="">@我</a></li></ul>
</li>
<li>
<a href="#">微博</a>
<ul><li><a href="">私信</a></li><li><a href="">评论</a></li><li><a href="">@我</a></li></ul>
</li>
</ul>
<script>
$(function() {
// 鼠标经过
// $(".nav>li").mouseover(function() {
// // $(this) jQuery 当前元素 this不要加引号
// // show() 显示元素 hide() 隐藏元素
// $(this).children("ul").slideDown(200);
// });
// // 鼠标离开
// $(".nav>li").mouseout(function() {
// $(this).children("ul").slideUp(200);
// });
// 1. 事件切换 hover 就是鼠标经过和离开的复合写法
// $(".nav>li").hover(function() {
// $(this).children("ul").slideDown(200);
// }, function() {
// $(this).children("ul").slideUp(200);
// });
// 2. 事件切换 hover 如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
$(".nav>li").hover(function() {
// stop 方法必须写到动画的前面
$(this).children("ul").stop().slideToggle();
});
})
</script>
</body>