var dom = document.getElementById();//原生js获取到的对象就是dom对象
特点:只能调用dom的方法与属性,不能调用jQuery的方法与属性
dom.style.backgroundcolor = 'red';//调用dom的属性与方法
dom.css('backgroundcolor','red');//不能调用dom的方法属性
利用jQuery获取的对象就是…
var $div01 = $('#one');//通过id
$div01.css()
特点:不能互通的
jQuery对象是一个伪数组,有下标有length但是不是数组
证明:
console.log($div1.__proto__ === Array.__proto__);
dom -> jQuery :用$把dom对象包起来
var $obj = $(dom对象);
jQuery -> dom :1.下标,2.get();
//method1 :下标
var div1 = $jQuery对象[下标]//下标0序
//method2 :get()方法
var div1 = $jQuery对象.get(下标)
获取文本
$('obj').text();
注:假如obj有子代,那么也会获取到子代的文本(div下的p)
设置文本
$('obj').text("String");
注:
格式:$('obj').css('想要获取的样式名');
设置样式
格式:$('obj').css('想要设置的样式名','样式值');
格式:$('obj').css({
xxx:xxx,
xxx:xxx
});
选择器 | 用途 |
---|---|
$(’#id’) | id选择器 |
$(.class’) | 类选择器 |
$(‘TagName’) | 标签名选择器 |
$(‘obj1,obj2,obj3’) | 并集选择器 |
$(‘obj1 obj2 obj3’) | 交集选择器 |
$('#father > #son')
获取ID为father的所有子元素中id为son 的元素
名称 | 用法 | 描述 |
---|---|---|
:eq(index) | $(“li:eq(2)”).css(‘color’,'red); | 从获取的li元素中,选择索引号为2的元素,索引从0开始 |
:odd | $(“li:odd”).css(‘color’,'red); | 奇数 |
:even | $(“li:even”).css(‘color’,'red); | 偶数 |
chirdren(),里面不写参数
名称 | 用法 | 描述 |
---|---|---|
children(selector) | $(‘ul’).children(‘li’) | 相当于$(‘ul-li’),子类选择器 |
find(selector) | $(‘ul’).find(‘li’) | 相当于$(‘ul li’),后代选择器 |
siblings(selector) | $(’#first’).siblings(‘li’); | 查找兄弟节点,不包括自己本身 |
parent() | $(’#first’).parent() | 查找父亲 |
eq(index) | $(‘li’).eq(2) | 相当于$(‘li:eq(2)’),index从0开始 |
next() | $(‘li’).next() | 找下一个兄弟 |
nextAll() | $(this).nextAll() | 找该元素后面的所有元素 |
prev() | $(‘li’)prev() | 找上一个兄弟 |
prevAll() | $(this).prevAll() | 找该元素前面的所有元素 |
案例:下拉菜单
==mouseover ==事件在鼠标移动选取的元素及其子元素上时触发
==mouseenter ==鼠标只在鼠标移动到选取元素上时触发
//案例:突出显示“
../ 代表当前文件的上一级目录
./” 代表当前文件所在目录
<script src="jquery-3.4.1.js"></script>
<script>
//获取所在的li
$(function() {
//需求1:给小人物加一个鼠标移入时间,当前(this)li的透明度为1,其他兄弟的透明度为0.4
//需求2:鼠标离开大盒子,所有li的透明度改成1
$('.wrap').find('li').mouseenter(function() {
$(this).css('opacity', 1).siblings('li').css('opacity', 0.4);
})
$('ul').mouseleave(function() {
$('ul').find('li').css('opacity', 1);
})
});
</script>
.show:显示(相当于display:block)
.hidden:隐藏(相当于display:none)
jquery:隐式迭代,链式编程(在于一个方法返回的是一个jquery对象,就可以继续点jquery方法)
$(‘li’).index()方法获取索引,从0开始
$('.center>li').eq(index)
$('.center>li:eq('+index+')')//做字符串拼接
.show()有返回值,返回本身
.show().siblings().hidden()
.attr(src,‘src’)
$('li[src="www.baidu.com"]')
$(selector).attr('属性名','属性值')
$(selector).removeAttr('属性名')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
*{
margin: 0;
padding: 0;
}
.wrapper{
width: 500px;
height: 200px;
margin: 100px auto;
display: flex;
justify-content: space-around;
border: 1px solid pink;
}
.left,.right,.center{
list-style: none;
}
.left{
flex:1;
}
.center{
flex:3;
}
.right{
flex:1;
}
</style>
<body>
<div class="wrapper">
<ul class="left">
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
</ul>
<ul class="center">
<li><a href="">1</a></li>
<li><a href="">2</a></li>
<li><a href="">3</a></li>
<li><a href="">4</a></li>
<li><a href="">5</a></li>
<li><a href="">6</a></li>
<li><a href="">7</a></li>
<li><a href="">8</a></li>
<li><a href="">1</a></li>
<li><a href="">2</a></li>
<li><a href="">3</a></li>
<li><a href="">4</a></li>
<li><a href="">5</a></li>
<li><a href="">6</a></li>
<li><a href="">7</a></li>
<li><a href="">8</a></li>
</ul>
<ul class="right">
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
<li><a href="">链接</a></li>
</ul>
</div>
</body>
</html>
<script src="jquery-3.4.1.js"></script>
<script>
$(function() {
//需求1:给左边的li设置鼠标移入事件,让对应的li显示,其他的隐藏
//需求2:给右边的li设置鼠标移入事件,让对应的li显示,其他的隐藏
//解决需求1:为什么不给a标签设置鼠标移入时间,而要给li标签
$('.left>li').mouseenter(function(){
//获取当前li的索引
let index = $(this).index();
console.log($('.center>li').eq(index).show().siblings('li').hide());
});
$('.right>li').mouseenter(function(){
let index = $(this).index();
index+=$('.left>li').length;
console.log($('.center>li').eq(index).show().siblings('li').hide());
})
});
</script>
没有button只能用input来实现type
addClass(类名1)
addClass(类名1 类名2)
.removeClass(类名);
.removeClass();
hasClass():
.toggleClass():没有这个类就添加,有就删除
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<style>
ul{
width: 500px;
height: 30px;
list-style: none;
display: flex;
justify-content: space-between;
margin:20px auto;
background-color: #ccc;
}
ul li{
width: 50px;
height: 100%;
background-color: aqua;
}
.main{
display:none;
}
.active{
border-top: 3px solid red;
}
.selected{
display:block;
}
style>
<body>
<ul>
<li>1li>
<li>2li>
<li>3li>
ul>
body>
html>
<script src="jquery-3.4.1.js">script>
<script>
$(function(){
$('ul>li').mouseenter(function(){
console.log($(this).addClass('active').siblings('li').removeClass('active'))
let index = $(this).index();
$('.main').eq(index).addClass('selected').sibling('.main').removeClass('selected')
})
$('ul').mouseleave(function(){
$('li').removeClass('active')
})
});
script>
显示和隐藏
$('#div1').show('slow')
1. 如果show没有参数就没有动画效果
2. 如果想要动画效果就要给他参数:
* 参数1:代表执行动画的时长可以是毫秒数,也可以是代表时长的三个字符串(fast:200ms normal:400ms slow:600ms)写错了,也行此时相当于Normal
* 参数2:动画执行完后的回调函数
$('#div1').hide
$(’#div1’).hide(2000);
$('#div1').toggle(1000)//
如果元素隐藏就动画显示,否则反之
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<style>
div{
width: 200px;
height: 200px;
background-color: red;
display: none;
}
style>
<body>
<input type="button" value="隐藏" id="hide">
<input type="button" value="显示" id="show">
<input type="button" value="切换" id="toggle">
<div id="div1">div>
body>
html>
<script src="jquery-3.4.1.js">script>
<script>
$(function(){
//1.显示
$('#show').click(function(){
//给div1显示出
// 1.1如果show没有参数就没有动画效果
// 1.2如果想要动画效果就要给他参数
/* 参数1:代表执行动画的时长可以是毫秒数,也可以是代表时长的三个字符串(fast:200ms normal:400ms slow:600ms)写错了,也行此时相当于Normal
参数2:动画执行完后的回调函数
*/
$('#div1').show('slow');//200ms
})
//2.隐藏
$('#hide').click(function(){
//$('#div1').hide(2000);//
//回调函数
$('#div1').hide(2000,function(){
alert();
})
})
//3.toggle
//如果元素隐藏就动画显示,否则反之
$('#toggle').click(function(){
//$('#div1').hide(2000);//
//回调函数
$('#div1').toggle(1000)//
})
});
script>
滑入
向下滑动元素
参数1:speed:“slow”,“fast”,ms数,可省略
参数2:回调函数
淡入
fadeIn
.click(function(){
$('#div1').animate({prop:value},speed)
})
.animate(prop,time,speed,callback)
如果你去鬼畜一个动画,他当前做不了就会加入动画队列,然后就会很鬼畜
方法:stop方法
解法:在同一个元素上执行多个动画,后面的动画会被放到动画队列中,前面的执行完了才会执行
stop(chearQueue,jumpToEnd)
不写参数默认两个false
JQuery中:
html()
设置/获取内容
获取到元素的所有内容:
$('#div1').html()=>
设置内容:
$('#div1').html("我是设置的内容")
会覆盖
$()方法
var $link=$('')
记住:
$("#div1").append($link)
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<script src="./jquery-3.4.1.js">script>
head>
<body>
<input type="button" value="按钮" id="btn" />
<ul id="ul1">
<li>我是第1个lili>
<li>我是第2个lili>
<li id="li3">我是第3个lili>
<li>我是第4个lili>
<li>我是第5个lili>
ul>
body>
html>
清空ul里面的所有元素
$("#ul1").html("");
不推荐使用,不安全,li清掉了,但是事件还在,所以可能造成内存泄漏
推荐使用
$("#ul1").empty();
不仅移除了元素。还清空了元素绑定的事件
移除某一个元素
$("#li3").remove();
看着像自杀,本质还是找到父亲,然后从父亲那边移除孩子
项 | 代码 |
---|---|
内容 | width(),height() |
内容+padding | innerWidth(),innerHeight() |
内容+padding+border | outerWidth(),outerHeight() |
内容+padding+border+margin | outerWidth(true),outerHeight(true) |
获取元素距父元素的top和left值
$('selector').position().top
$('selector').postion().left
原生js注册事件
document.getElementById("div1").onclick = function(){
alert("点击事件")
}
document.getElementById("div1").onclick = function(){
alert("点击事件 lalala")
}
原生js注册相同事件,后面会覆盖前面的
Jquery注册
$('#one').click(function(){
alert('点击事件')
})
$('#one').click(function(){
alert('点击事件啦啦啦')
})
Jquery给同一个元素注册相同的事件,后面的不会覆盖前面的
注意这里不是同时注册而是有先后顺序的
$('div').click(function(){
console.log("")
})
$('div').mouseenter(function(){
console.log("")
})
$('div').bind({
mouseenter:function(){
},
click:function(){
}
})
可以接受一个类似于json格式的事件类型与处理程序
要给父元素注册事件
$('parent').delegate('p','click',function(){
});
参数列表解析:(要绑定事件的元素,事件类型,事件处理函数)
缺点:只能注册委托事件,因此注册事件需要记很多方法
$('body').delegate('div',{
mouseenter:function(){
console.log("移入")
},
click:function(){
console.log("单击")
}
})
本质是事件冒泡
JQuery 1.7 之后,都用on统一注册,也就是前面的方法都不需要用
$(selector).on('click',function(){})
$(selector).on('click','span',function(){})
给selector注册绑定代理事件’
支持动态绑定
$('selector').off()//移除当前选择元素的所有事件
$('selector').off('click')//移除选择元素的click事件
$(selector).trigger('事件名')
$('#one').on('lx',function(){
$(this).text('谢谢你')
})
// 没有触发时机,现在就是要触发怎么办,用trigger,
$('#btn2').on('click',function(){
var res = confirm('哈皮');//
if(res){
//触发自定义的lx事件
$('#one').trigger('lx');
}
})
});
什么是事件对象
注册一个事件 系统就会帮我们生成一个对象 记录这个事件触发时候的信息
例如:比如触发事件时有有没有按住某个键,又比如坐标信息…
<div id="one" class="one">
<input type="button" id="btn" value="我是按钮">
<br />
<a href="https://www.baidu.com">百度一下,你就知道a>
div>
$('#one').on('click', function (e) {
//如何获取事件对象
//jquery中用事件参数e来获取
//jquery事件对象是对原生js事件对象的封装,处理好了兼容性
//2.事件对象中常用的三个坐标
//触发事件那一点距离屏 幕左上角的值
console.log("Screen" + e.screenX + " : " + e.screenY);
//触发事件那一点距离 可视区左上角的值
console.log("client" + e.clientX + " : " + e.clientY);
//触发事件那一点距离 页面左上角的值
console.log("page" + e.pageX + " : " + e.pageY);
alert("我是div的单击事件。")
})
$('#btn').on('click',function(e){
// 也会触发div的单击事件
alert("我是按钮的单击事件");
// 阻止事件冒泡
// 1. 接受事件对象e
// 2. 调用
e.stopPropagation();//阻止事件冒泡
})
$('a').on('click',function(e){
alert("我是a标签的单击事件");
// e.stopPropagation();//阻止事件冒泡
// // 阻止默认行为——阻止a标签的一个跳转
// e.preventDefault();
// 既能阻止事件冒泡,又能阻止默认行为
return false;
})
5.给页面注册键盘按下事件,e.keyCcode能获取按得是哪个键
$(document).on('keydown',function(e){
// console.log(e.keyCode);
let $div = $('#one');
offset = 20;
let $div_left = $div.position().left;
let $div_top = $div.position().top;
switch(e.keyCode){
case 37:$div.css('left',$div_left-=offset);break;
case 38:$div.css('top',$div_top-=offset);break;
case 39:$div.css('left',$div_left+=offset);break;
case 40:$div.css('top',$div_top+=offset);break;
}
})
$(selector).on()
有返回值,返回的就是对selector,所以又可以链式编程
对next(),prev()的补充,这里补充到前面
属性选择器
页面内跳转的方法:
[要显示的内容](要跳转的id)
eg:
<span id="span">span>
(这里可以跳转到span)[#span]
如果给元素调用一个方法,方法有返回值,并且返回的是一个jquery对象,那就可以继续再点出jquery方法
$('div').width(100).height(100).css('background-color','red')
但是如果返回的是一个数值,而非一个jQuery对象就会报错
$('div').width(100).width().height()
:报错,因为$('div').width(100).width()
返回的是一个数值,而数值不能点出jquery方法
end():回到jQuery上一个状态
$(this).text(sx_sign).prevAll().text(sx_sign).end()//相当于$(this)
但是同样的,语句$('div').width(100).width().end()
依然错误,因为返回的是数值无法继续点出jQuery方法
let $sel = $(selector);
$sel.each(function(index,element){
//index:索引
//element:元素,是一个BOM对象
})
JQuery.fn.jquery
$.prototype.jquery
2. 如果引入了多个jQuery文件,那$指代的是谁
后引入谁,就会覆盖之前引入的
3. 如过就是想用前面的怎么办
多库冲突/多库共存问题
提供了一个机制:
JQuery.noconflict()
:释放$的控制权,这样$就指代后引入的了
如果又想用怎么办,只要接受返回值就行
var _$ = JQuery.noconflict();
自执行函数
(function(){
}())
什么是 插件
插件就是做扩展功能的,就像一部手机本来只有打电话发短信的功能,但是你可以下载app来扩展功能
jq22网址
颜色插件:jquery.color.js
/*
我们知道jquery有个animate方法,
但是里面的backgroundColor会不起作用,
这个时候就需要用到我们的插件了
*/
使用插件的一般流程: