1、jquery与js的区别

  (1)javascript的缺点

  书写繁琐,代码量大

  代码复杂

  动画效果,很难实现。使用定时器 各种操作和处理

  (2) JavaScript和jquery的定义

  1. Javascript是一门编程语言,我们用它来编写客户端浏览器脚本。
  2. jQuery是javascript的一个库,包含多个可重用的函数,用来辅助我们简化javascript开发
  3. jQuery能做的javascipt都能做到,而javascript能做的事情,jQuery不一定能做到

    

  注意:一般情况下,是库的文件,该库中都会抛出来构造函数或者对象,如果是构造函数,那么使用new关键字创建对象,如果是对象直接调用属性和方法

  (3)区别

 # 1 DOM文档加载的步骤
1.解析HTML结构。
2.加载外部脚本和样式表文件。
3.解析并执行脚本代码。
4.DOM树构建完成。
$(document).ready(function(){}) / $(function(){})
5.加载图片等外部文件。
6.页面加载完毕。
window.onload()
#2 执行时间不同 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。 #3 编写个数不同 window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个 $(document).ready()可以同时编写多个,并且都可以得到执行 #4 简化写法不同 window.onload没有简化写法 $(document).ready(function(){})可以简写成$(function(){});

  (4)juqery的引入与使用

    <script src="jquery-3.2.1.js"></script>
<script type="text/javascript">
$(document).ready(function () { });
$(function () { })
</script>

2、jquery选择器

  1.基本选择器

        //1.标签选择器
$($('h1')[0]).click(function () {
$(this).css('background-color','red');
$(this).css('font-size','22px');
$(this).css('line-height','22px');
}); //2.id选择器
$('#old').click(function () {
$(this).css('color','green');
}); //3.class选择器
$('.box1').click(function () {
$(this).css('font-size','30px');
}); //4.通配符选择器 * 使用不是很频繁
//$('*').html(''); 清空整个页面的dom元素

   2.层级选择器

      //1.后代选择器
$('ul p').click(function () {
$(this).css('color','red')
}); //2.子代选择器
$('ul>li').click(function () {
$(this).css('font-size','22px')
}); //3.毗邻选择器 匹配该元素紧邻的下一个兄弟元素
$('ul+h2').click(function () {
$(this).css('background-color','red')
}); //4.兄弟选择器, 匹配的元素后面的所有兄弟元素
$('ul~h3').click(function () {
$(this).css('color','blue');
});

  

  3.基本过滤选择器

        //1.获取first last元素
$('li:first').css('font-size','43px');
$('li:last').css('font-size','43px'); //2.eq gt lt 选中索引值为1的元素 * ,大于,小于
$('li:eq(1)').css('font-size','43px');
$('li:gt(1)').css('font-size','13px');
$('li:lt(1)').css('font-size','23px'); //3.奇数偶数
$('li:odd').css('background-color','pink');
$('li:even').css('background-color','orange');

    

  4.属性选择器

        //1. 标签名[属性名]  查找所有含有id属性的该标签签名的元素
$('li[id]').css('color','red'); //2. 匹配给定的属性值是active的元素
$('li[class=active]').css('color','red'); //3.
$('li[class^=a]').css('color','red'); //4.
$('li[class$=e]').css(); //5. 匹配给定的属性是以包含某些值的元素
$('li[class*=btn]').css()
    解释:
标签名[属性名],查找所有含有id属性的该标签名的元素
匹配给定的属性 是what值 [attr=value] 匹配给定的属性是某个特定值的元素
没有class 也会发生变化,[attr!=value] 匹配所有不含有指定的属性,或者属性不等于特定值的元素
匹配给定的属性是以某些值开始的元素 ^
匹配给定的属性是以某些值结尾的元素 $
匹配给定的属性是以包含某些值的元素 *

  

 5.筛选选择器/筛选方法

  (1)each遍历方法

1.each 遍历
$('ul').children().each(function (index,ele) {
// console.log(index,ele);
var isDanger = $(this).hasClass('danger');
if(isDanger){
$(this).css('color','red');
}else{
$(this).css('font-size','28px');
}
});

  (2)父兄子

    $($('h1')[2]).click(function () {

        //1.获取父级节点
$(this).parent(); //一个父亲节点
$(this).parents(); //所有父辈节点 //2.获取兄弟节点
$(this).siblings(); //所有的兄弟节点 $(this).prev(); //前一个兄弟节点
$(this).prevAll(); //all 前一个兄弟节点 $(this).next(); //下一个兄弟节点
$(this).nextAll(); //all 下一个兄弟节点 //3.获取儿子,后代节点
$(this).parent().children('h1').css('font-size','22px'); //所有的儿子节点
$(this).parent().find('h1').css('color','red'); //后代节点 //4.指定eq last first
$(this).parent().children().eq(2);
$(this).parent().children().first();
$(this).parent().children().last(); //5.指定标签 h1
$(this).parent().children('h1');
$(this).parents('body').children('h1'); })
   解释:
获取第n个元素 数值从0开始 .eq()
获取第一个元素 .first()
获取最后一个元素 .last()
获取父亲元素 .parent()
选择所有的兄弟元素 .siblings()
查找所有的后代元素 .find()

3、jquery对象和Dom对象转换

#Dom对象--> jquery对象
var box = document.getElementById('box');
console.log($(box)); #jquery对象--> DOM对象
$('button')[0]
$('button').get(0) #注:
Dom对象 box.onclick = function(){}
jquery对象 $(box).click(function(){})

4、效果

 1. 隐藏显示 hide show toggle

    show: 显示隐藏的匹配元素 语法:show(speed,callback) 参数:
1.speed:三种预定速度之一的字符串('slow','normal','fast')或表示动画时长的毫秒值(如:1000毫秒==1秒)
2.callback:在动画完成时执行的函数,每个元素执行一次
hide: hide(speed,callback)跟show使用方法类似,表示隐藏显示的元素。
可以通过show()和hide()方法,来动态控制元素的显示隐藏
toggle: 如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。 $('#box').css('display','block');
$('#box').show('slow',function(){}) // slow normal fast
$('#box').hide(2000,function(){})
$('#box').toggle(3000,function(){})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
#box1 {
border: 1px solid red;
width: 70px;
height: 70px;
} </style>
</head> <body>
<div id="box1"></div>
<input type="button" id="btn" value="隐藏">
<script src="jquery-3.2.1.min.js"></script>
</body> <script type="text/javascript"> //隐藏显示 hide show toggle
$(function () {
$('#btn').click(function () {
// $(this).prev().toggle();
}); var flag = 1
$('#btn').click(function () {
if (flag) { $(this).prev().hide(3000)
$(this).val('显示');
flag = 0
}else{ $(this).prev().show(2000)
$(this).val('隐藏')
flag = 1
} })
})
</script>
</html>

  2. 盒子变高变低 slideUp slideDown slideToggle

    slideDown: 通过高度变化(向下增大)来到动态地显示所有匹配的元素,在显示完成后触发一个回调函数.
用法和参数跟上面类似.
slideUp: 通过高度变化(向上减小)来动态地隐藏所有匹配的元素,在隐藏完成后可选地触发一个回调函数。
用法和参数跟上面类似.
slideToggle: 通过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回调函数.
跟toggle用法类似. $('#box').slideDown(2000);
$('#box').slideUp(3000);
$('#box').slideToggle('slow');

  

  3.淡入淡出 fadeIn fadeOut fadeTo fadeToggle

    fadeIn: 通过不透明度的变化来实现所有匹配元素的淡入效果,并在动画完成后可选地触发一个回调函数。
这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
fadeOut: 通过不透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。
这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
fadeTo: 把所有匹配元素的不透明度以渐进方式调整到指定的不透明度,并在动画完成后可选地触发一个回调函数。
这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
fadeToggle:通过不透明度的变化来开关所有匹配元素的淡入和淡出效果,并在动画完成后可选地触发一个回调函数。
这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
实现淡入淡出的效果就是使用此方法。
  $("p").fadeIn("900");        //用900毫秒时间将段落淡入
  $("p").fadeOut("900");    //用900毫秒时间将段落淡出
  $("p").fadeToggle("900");  //用900毫秒时间将段落淡入,淡出
  $("p").fadeTo("slow", 0.6); //用900毫秒时间将段落的透明度调整到0.6

  4、动画 animate  delay stop

    animate:用于创建自定义动画的函数。
animate(params,[speed],[fn])。
params:一组包含作为动画属性和终值的样式属性和及其值的集合。
speed:三种预定速度之一的字符串("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)
fn:在动画完成时执行的函数,每个元素执行一次。
stop: 停止所有在指定元素上正在运行的动画。
stop([clearQueue],[jumpToEnd])
clearQueue:如果设置成true,则清空队列。可以立即结束动画。默认是false
设置成false,让当前正在执行的动画立即完成,并且重设show和hide的原始样式,调用回调函数等。
delay: 用来做延迟的操作。
delay(1000),一秒之后做后面的操作。
 // jquery 链式调用

<script type="text/javascript">
$(function () {
//动画 animate delay stop $('#btn').click(function () {
$(this).prev().animate({'width':'200px','height':'200px'},3000)
$(this).prev().animate({'margin-left':'20px'}).delay(200).animate({'margin-top':'30px'})
});
$('#btn1').click(function () {
$(this).prevAll('div').stop()
})
})
</script>

5、jquery的属性操作

jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作。
html属性操作:是对html文档中的属性进行读取,设置和移除操作。比如attr()、removeAttr()
DOM属性操作:对DOM元素的属性进行读取,设置和移除操作。比如prop()、removeProp()
类样式操作:是指对DOM属性className进行添加,移除操作。比如addClass()、removeClass()、toggleClass()
值操作:是对DOM属性value进行读取和设置操作。比如html()、text()、val():用于表单控件中获取值,比如input textarea select等等
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单个标签 修改css属性</title>
<style type="text/css">
.active {
background-color: pink;
} .box1 {
color: orange;
} .font1 {
font-size: 22px;
} </style>
</head>
<body>
<h1 id="Luffycity" class="box1">路飞学城</h1>
<input type="button" id="btn" value="点击">
<h2 id="oldBoy">老男孩</h2> <script src="jquery-3.2.1.min.js"></script>
</body> <script type="text/javascript"> $(function () {
$("#Luffycity").click(function () { //1. html属性操作 attr() //1.1 获取标签的 各种属性值 : attr() 如果有1个参数,表示获取值
$(this).attr('id');
$(this).attr('class');
$(this).attr('title'); //1.2 设置标签的属性值class id name: attr() 如果有2个参数,表示设置值
$(this).attr('class', 'active');
$(this).attr({'id': 'box2', 'name': 'name11'}); //如果设置多个类名,不能使用attr //1.3 删除1个或多个属性
$(this).removeAttr('id');
$(this).removeAttr('name title'); // 2、DOM属性操作 prop 可以设置没有的属性
//attr 只能操作标签自带的属性, //2.1 获取该元素的class值
$(this).prop('class'); //2.2 设置值
$(this).prop({'title': 'img1', 'title22': 'active'}); //2.3 删除dom对象的title属性
$(this).removeProp('title', 'title2'); // 3、类样式操作 addClass() removeClass() toggleClass()添加类,删除类 //3.1 添加一个或多个 class
$(this).addClass('box1');
$(this).addClass('box1 font1'); //添加多个 //3.2 删除一个或多个class
$(this).removeClass('font1');
$(this).removeClass(); //移除所有的 //3.3.反复添加删除class属性值
$(this).toggleClass('active'); ///4、值操作 // 4.1 获取值
$(this).text(); //获取标签的text 路飞学城
$(this).html(); //获取标签的里面的html 路飞学城
$("#btn").val(); //获取input标签的 val 点击 //4.2 设置值
$(this).html('路飞学城2');
$(this).text('路飞学城22');
$(this).html("<span>我是一个span</span>");
$("#btn").val('设置了value'); //表单控件使用的一个方法
});
})
</script>
</html>

6、from表单中的操作

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css"> div {
margin: 20px;
}
</style>
</head>
<body>
<div>
<input type="radio" value="1" name="sex">男
<input type="radio" value="2" name="sex" checked>女
<input type="radio" value="3" name="sex">other
</div> <div>
<input type="checkbox" name="hobby" value="11" checked>game
<input type="checkbox" name="hobby" value="12" checked>sing
<input type="checkbox" name="hobby" value="13">book
</div> <div>
username:<input type="text" name="username" placeholder="请输入用户名"><br>
password:<input type="password" name="password" placeholder="请输入密码">
</div> <div>
<button type="reset">重置</button>
<button type="submit">提交</button>
<button type="button">登录</button>
</div> <div>
<select name="city" id="city" multiple>
<option value="21">shanghai</option>
<option value="22" selected>guangzhou</option>
<option value="23" selected>beijing</option>
<option value="24">xian</option>
</select>
</div>
<div>
<textarea name="desc" id="desc" cols="30" rows="10"></textarea>
<textarea name="desc" id="desc1" cols="30" rows="10"></textarea>
<textarea name="desc" id="desc2" cols="30" rows="10"></textarea>
</div> <script src="./jquery-3.2.1.min.js"></script>
</body>
<script type="text/javascript">
$(function () { //1.单选框 type=radio 设置,获取 value
$("input[type=radio]").val(['0']);
console.log($('input[type=radio]:checked').val());
$('input[type=radio]').get(1).checked = true //radio第二个框设定为checked //2.复选框 type=checkbox 仅仅获取第一个checked
$('input[type=checkbox]').val(['12', '13']);
console.log($("input[type=checkbox]:checked").val());
$.each($('input[type="checkbox"]:checked'), function () { // $.each循环下
console.log($(this).val())
})
$('input[type=checkbox]').get(1).checked = true //3.下拉列表select option
$('select').val(['23']); //设置 必须用select
$('select').val(['21', '22', '23', '24'])
$('select[name=city]').val(['21']) console.log($('#city option:selected').val()); //获取值
console.log($('select[id=city]:selected').text())
console.log($(':selected').text())
console.log($('select>option:selected').eq(1).text()) //4. 文本type=text
$('input[type=text]').val('试试就是说')
console.log($('input[type=text]').val()) //5.button按钮
$('button[type=reset]').html('我要重置了') //6.文本框,禁用输入字段
$("textarea[id='desc']").attr('disabled', true)
$("textarea[id='desc1']").attr('readonly', true) })
</script>
</html>

7、jquery的文档操作

  插入操作

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>节点的增删改查</title>
</head>
<body>
<h1>路飞学城0</h1>
<script src="jquery-3.2.1.min.js"></script>
</body> <script type="text/javascript">
$(function () {
$($('h1')[0]).click(function () { //1.创建新的标签
var oH2 = document.createElement('h2');
var btn = document.createElement('input'); //2.给新标签inner 新的html text值
$(oH2).html('路飞学城2');
$(oH2).text('路飞学城22');
$(oH2).html("<span>我是一个span</span>");
$(btn).val('设置了value'); //3.给新标签添加属性值 id title class name
$(oH2).attr('id','Luffycity2');
$(oH2).attr({'title':'luff','class':'active','name':'luff'});
$(oH2).addClass('active2'); //插入操作
//4.父子add的各种方式 append prepend
$(this).parent().append(oH2); //追加到子元素的后面
$(oH2).appendTo($(this).parent()); $(this).parent().prepend(oH2); //添加到子元素的最前面
$(oH2).prependTo($(this).parent()); //5.同级兄弟 add元素 before after
$(this).after(oH2);
$(oH2).insertAfter($(this)); $(this).before(oH2);
$(oH2).insertBefore($(this)); })
}) </script>
</html>

  复制clone(true),替换,删除

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="Luffycity1">路飞学城1</h1>
<input type="button" id="btn" value="复制"><br>
<input type="button" id="btn2" value="替换">
<input type="text" id="username" value="文本框"><br>
<input type="button" id="btn3" value="empty">
<input type="button" id="btn4" value="remove">
<input type="button" id="btn5" value="detach">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script src="jquery-3.2.1.min.js"></script>
</body>
<script type="text/javascript">
$(function () { // 复制操作:
$('#btn').click(function () {
$('#Luffycity1').after($('#Luffycity1').clone(true)); // 2.clone(true):元素以及其所有的事件处理并且选中这些克隆的副本(简言之,副本具有与真身一样的事件处理能力)
$('#Luffycity1').after($('#Luffycity1').clone()); // 1.clone():克隆匹配的DOM元素并且选中这些克隆的副本。
}); // 替换操作
$('#btn2').click(function () {
$('#username').replaceWith('<span>我是新的文本</span>') // 替换成指定的HTML或DOM元素。
$('<br/><hr/><button>按钮</button>').replaceAll('h4') // 替换掉所有 selector匹配到的元素
}); //删除操作
//1. empty() 只是清空了被选的内容
$('#btn3').click(function () {
$('ul').empty();
}); //2.remove() 被选元素也被删掉了,事件就没有了,什么都没有了
$('#btn4').click(function () {
$('ul').remove();
}); //3.detach() 移除匹配的节点元素 删除节点后,事件会保留
$('#btn5').click(function () {
var btn5 = $(this).detach();
console.log($(btn5));
$('ul').append($(btn5));
});
}) </script>
</html>

8、jquery的位置属性

1.position 获取匹配元素,相对父元素得偏移
console.log($('p').position());
console.log($('p').position().top);
console.log($('p').position().left); 2.scrollTop scrollLeft 获取匹配元素,相对滚动条卷起得位置信息
console.log($(document).scrollTop());
console.log($(document).scrollLeft()); //监听文档滚动
$(document).scroll(function () {
console.log($(document).scrollTop());
console.log($(document).scrollLeft());
}); 3.offset 获取匹配元素,在当前位置相对于浏览器的偏移
console.log($('#btn').offset());
console.log($('#btn').offset().top);
console.log($('#btn').offset().left); 4.width height 获取元素得宽高
console.log($('#box').width());
console.log($('#box').height()); // 设置宽高
$('#box').width(400);
$('#box').height(400); 5.innerWidth innerHeight
innerWidth = width + 2*padding 不包括边框,获取匹配元素得内部宽度
innerHeight = height + 2*padding 不包括边框,获取匹配元素得内部高度
console.log($('#box').innerWidth());
console.log($('#box').innerHeight()); 6.outerWidth outerHeight
outerWidth = width + 2*padding + 2*border 获取匹配元素得外部宽度
outerHeight = height + 2*padding + 2*border 获取匹配元素得外部高度
console.log($('#box').outerWidth());
console.log($('#box').outerHeight());
//监听文档滚动条滚动
$(document).scroll(function () {
$(document).scrollTop() > 100 ? $('#gotop').show() : $('#gotop').hide()
}) $('#gotop').click(function () {
$('html,body').animate({scrollTop: '0'}, 2000)
})

9、jquery案例

24-[jQuery]-案例

10、事件概念

1.事件的概念:
HTML中与javascript交互是通过事件驱动来实现的,
例如鼠标点击事件、页面的滚动事件onscroll等等。 2.什么是事件流?
事件流描述的是从页面中接收事件的顺序 3.DOM事件流
① 事件捕获阶段;
② 处于目标阶段;
③ 事件冒泡阶段;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件流</title>
<script> window.onload = function(){ var oBtn = document.getElementById('btn'); oBtn.addEventListener('click',function(){
console.log('btn处于事件捕获阶段');
}, true);
oBtn.addEventListener('click',function(){
console.log('btn处于事件冒泡阶段');
}, false); document.addEventListener('click',function(){
console.log('document处于事件捕获阶段');
}, true);
document.addEventListener('click',function(){
console.log('document处于事件冒泡阶段');
}, false); document.documentElement.addEventListener('click',function(){
console.log('html处于事件捕获阶段');
}, true);
document.documentElement.addEventListener('click',function(){
console.log('html处于事件冒泡阶段');
}, false); document.body.addEventListener('click',function(){
console.log('body处于事件捕获阶段');
}, true);
document.body.addEventListener('click',function(){
console.log('body处于事件冒泡阶段');
}, false); }; </script>
</head>
<body>
<a href="javascript:;" id="btn">按钮</a>
</body>
</html> 事件流

事件流

1、addEventListener
addEventListener 是DOM2 级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。
最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。 2、document、documentElement和document.body三者之间的关系: document代表的是整个html页面;
document.documentElement代表的是<html>标签;
document.body代表的是<body>标签;

  在标准的“DOM2级事件”中规定,事件流首先是经过事件捕获阶段,接着是处于目标阶段,最后是事件冒泡阶段。这里可以画个图示意一下:


11.jquery的常用事件

  (1)载入dom

  当页面载入成功后再运行的函数事件

$(document).ready(function(){
do something...
}); //简写
$(function($) {
do something...
});

  

  (2)查看事件

        $('.p1').click(function (ev) {
console.log(ev.type); // 获取事件的类型
console.log(ev.target); // 获取事件发生的DOM对象
console.log(ev.pageX); // 获取到光标相对于页面的x的坐标和y的坐标
console.log(ev.pageY);
console.log(ev.which) // 该方法的作用是在鼠标单击事件中获取到鼠标的左、中、右键;在键盘事件中获取键盘的按键.
})

  (3)事件阻止

    //常用的事件方法:1.阻止事件冒泡  2.阻止默认事件  3.return false
$(function () { //1.阻止事件冒泡
$('div').click(function (ev) {
alert('当前按钮的事件被触发了')
}); $('div button').click(function (ev) {
ev.stopPropagation()
}); $('div #a1').click(function (ev) {
ev.stopPropagation()
}); //2.阻止默认事件 a标签跳转
$('div #a1').click(function (ev) {
ev.preventDefault()
}) //3.全部阻止 return false
$('div #a2').click(function () {
return false
}) })

  (4)事件绑定 bind

        // 1.事件bind
//方式a
$('button').bind('click mouseenter',function () {
alert('事件被绑定了')
}); //方式b:
$('a').bind({
'click':add1,
'mouseenter':add2
}); function add1() {
alert('点击事件被绑定了')
}
function add2() {
alert('事件被绑定了')
} //2.事件移除unbind
$('button').unbind() $('a').unbind('mouseenter') setTimeout(function () {
$('button').unbind('click',function () {
alert(1111)
})
},3000) //3.绑定自定义事件
$('button').bind('myClick',function (ev,a,b) {
alert("两个数之和是" + a+b)
}); $('button').trigger('myClick',[1,2]) //触发   })
    $("p").one( "click", fun...) //one 绑定一个一次性的事件处理函数 注:
添加的事件不能发生在未来 --》 动态生成的元素不能直接添加对象
里面的事件也不能发生了-->想让发生,事件代理!!

  

bind()方法还有一种简写方式,上面的代码还可以换成:

  代码如下:
$("div p").click(function () {
alert($(this).text());
})

  

  bind的两个问题

第一个问题,这里用了隐式迭代的方法,如果匹配到的元素特别多的时候,比如如果我在div里放了50个p元素,就得执行绑定50次。对于大量元素来说,影响到了性能。

但是如果是id选择器,因为id唯一,用bind()方法就很快捷了。

第二个问题,对于尚未存在的元素,无法绑定。点击页面上的按钮,将动态添加一个p元素,点击这个p元素,会发现没有动作响应。

  (6)事件委派 delegate

// 与bind 不同的是当时间发生时才去临时绑定。
$("p").delegate("click",function(){
do something...
}); $("p").undelegate();    //p元素删除由 delegate() 方法添加的所有事件
$("p").undelegate("click") //从p元素删除由 delegate() 方法添加的所有click事件

  (5)事件代理on

  on()其实是将以前的绑定事件方法作了统一,可以发现无论bind()还是delegate()其实都是通过on()方法实现的,只是参数不同罢了。

    事件代理: 自己完成不了当前的点击事件,交给父级元素做这件事件
父级.on('事件名字','点击当前的标签元素选择器',fn)
//bind 只能绑定已经存在的标签,对于后面添加的标签不起作用
//on事件代理 动态监听 可以对后添加的标签起作用 $('ul').on('click', function (ev) {
alert($(ev.target).html())
var newLi = document.createElement('li')
$(newLi).html('10')
$(this).append(newLi)
$(ev.target).css('color', 'red')
}) // on 事件委托,以后统一用on
$(document).on('click', 'ul', function (ev) {
alert($(ev.target).html())
var newLi = document.createElement('li')
$(newLi).html('10')
$(this).append(newLi)
$(ev.target).css('color', 'red')
}) //on 实现bind的效果
$(document).on('click mouseenter', 'ol', function (ev) {
alert($(ev.target).html())
var newLi = document.createElement('li')
$(newLi).html('10')
$(this).append(newLi)
$(ev.target).css('color', 'red')
})

  (6)jQuery事件绑定on()、bind()与delegate() 方法详解

    https://www.cnblogs.com/czaiz/p/5519421.html

总结

1.选择器匹配到的元素比较多时,不要用bind()迭代绑定

2.用id选择器时,可以用bind()

3.需要给动态添加的元素绑定时,用delegate()或者on()

4.用delegate()和on()方法,dom树不要太深

5.尽量使用on()

  (7)事件移除

//对应于bind()、delegate()和on()绑定方法,其移除事件的方法分别为:

$( "div p" ).unbind( "click", handler );
$( "div" ).undelegate( "p", "click", handler );
$( "div" ).off( "click", "p", handler );

12、鼠标事件

    1. .click        单击
2. .dblclick 双击
3. .mousedown 鼠标按下不松开
4. .mouseup 鼠标松开
5. .mouseover 移入,被选元素和子元素被选中时会触发
6. .mouseout 移出,被选元素和子元素被选中时会触发
7. .mouseenter 移入,只有被选中元素移入时
8. .mouseleave 移出,只有被选中元素移入时
9. .mousemove 移动
10. .hover === mouseenter mouseleave
$('#box').hover(function(){},function(){})
11. .focus 获取焦点
12. .blur 失去焦点
13. .change input发生变化时
14. .keydown 键盘按下
15. .keyup 键盘弹起

13、表单事件

    1. .change   // 此事件仅限于 input元素 textarea select, 表单元素发生改变时触发事件.
2. .select // 仅限于用在 input中 type=text textarea, 文本元素发生改变时触发事件.
3. .submit // 适应于表单提交, 表单元素发生改变时触发事件.
    //表单事件
$(function () {
//1.change() 仅限用于 input元素 textarea select
$('select').change(function () {
alert($('select option:selected').text())
}) //2.select() 仅限用于 input type=text textarea $('#other2').select(function () {
alert($(this).val())
}) //3.form表单提交时 submit()
$('form').submit(function (ev) { alert('1111')
ev.preventDefault() }) })

14、jquery的Ajax

AJAX = 异步的javascript和XML(Asynchronous Javascript and XML)
简言之,在不重载整个网页的情况下,AJAX通过后台加载数据,并在网页上进行显示。
通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON -
同时您能够把这些外部数据直接载入网页的被选元素中。

  5种方法

1.jQuery的load()方法

2. jquery的getJSON方法

3.jquery的$.get()方法

4.jquery的post()方法

5. jquery的$.ajax()方法
#1.jQuery的load()方法
jQuery load()方法是简单但强大的AJAX方法。
load()方法从服务器加载数据,并把返回的数据放入被选元素中。
语法:
$("selector").load(url,data,callback);
必须的url参数规定记载的url地址
可选的data参数规定与请求一同发送的查询字符串键/值对的集合
可选的callback参数是load()方法完成后所执行的函数名称
1.
$('#btn').click(function(){
//只传一个url,表示在id为#new-projects的元素里加载index.html
$('#new-projects').load('./index.html');
})
2.
$('#btn').click(function(){
//只传一个url,导入的index.html文件含有多个传递参数,类似于:index/html?name='张三'
$('#new-projects').load('./index.html',{"name":'张三',"age":12});
})
3.
$('#btn').click(function(){
//加载文件之后,会有个回调函数,表示加载成功的函数
$('#new-projects').load('./index.html',{"name":'张三',"age":12},function(){});
})
注意:load函数最好在服务器网页中应用,也就是说要在服务器上运行,本地调试需要搭建后端本地环境。 #2. jquery的getJSON方法
jQuery的AJAX中使用getJSON()方法异步加载JSON格式数据。获取服务器中的数据,并对数据进行解析,显示到页面中
语法: $.getJSON(url,[data],[callback])
url参数为请求加载json格式文件的服务器地址,可选项data参数为请求时发送的数据,callback参数为数据请求成功后执行的函数 $.getJSON("./data/getJSON.json", function (data) {
var str = "";//初始化保存内容变量
$.each(data, function(index,ele) {
$('ul').append("<li>"+ele.name+"</li>") });
}) #3.jquery的$.get()方法
$.get() 方法通过 HTTP GET 请求从服务器上请求数据
语法:$.get(URL,callback);
url参数规定你请求的路径,是必需参数,callback参数为数据请求成功后执行的函数 $.get('./data/getJSON.json',function(data,status){
console.log(status); //success 200状态码 ok的意思
}) #4.jquery的post()方法
与get()方法相比,post()方法多用于以POST方式向服务器发送数据,服务器接收到数据之后,进行处理,并将处理结果返回页面
语法:$.post(URL,data,callback);
url参数规定你请求的路径,是必需参数,可选的data参数是连同请求发送的数据。可选的callback参数为数据请求成功后执行的函数 $.post('/index',{name:'张三'},function(data,status){
console.log(status);
})

15. 重点:$.ajax()方法

jquery的$.ajax()方法 是做ajax技术经常使用的一个方法。
参数如下:
1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。 4.async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 5.cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。 6.data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看  processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。 7.dataType: 要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下: xml:返回XML文档,可用JQuery处理。 html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。 script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。 json:返回JSON数据。 jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。 8.beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } 9.complete: 要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 } 10.success: 要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 } 11.error: 要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 } 12.contentType: 要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。 13.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; } 14.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; } 15.global: 要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。 16.ifModified: 要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。 17.jsonp: 要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。 18.username: 要求为String类型的参数,用于响应HTTP访问认证请求的用户名。 19.password: 要求为String类型的参数,用于响应HTTP访问认证请求的密码。 20.processData: 要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。 21.scriptCharset: 要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。通常在本地和远程的内容编码不同时使用

$.ajax()方法的参数

 

   (1)$.ajax() 的get请求方法

    $.ajax({
url:'./data.json',
type:'get', // 默认是 get
dataType:'json', // 如果不指定 默认自动识别文件类型
success:function (data) {
console.log(data);
},
error:function () { }
});

  

  (2)$.ajax() 的post请求方法

$.ajax({
url:"/course",
type:'post',
data:{
username:'zhangsan',
password:'123'
},
sunccess:function (data) {
if(data.state === 'ok' && data.status === '200'){
//登录成功
}
},
error:function (err) {
console.log(err);
}
});

前端- jquery- 总结的更多相关文章

  1. Web前端JQuery入门实战案例

    前端jquery入门到实战 为什么要学习Jquery?因为生活. 案例: <!DOCTYPE html> <html lang="zh-CN"> <h ...

  2. Web前端JQuery面试题(三)

    Web前端JQuery面试题(三) 1.怎么阻止冒泡过程? stopPropagation(); // 阻止冒泡过程 2.ready()方法和onload()方法的区别? onload()方法要等页面 ...

  3. Web前端JQuery面试题(二)

    Web前端JQuery面试题(二) 1.请写出jquery的语法? <script type="text/javascript"> $(document).ready( ...

  4. Web前端JQuery面试题(一)

    Web前端JQuery面试题(一) 一:选择器 基本选择器 什么是#id,element,.class,*,selector1, selector2, selectorN? 答: 根据给定的id匹配一 ...

  5. 关于前端 jQuery 面试的知识点

    参考一个博主整理的一些前端 jQuery 的一些面试题 参考博客:https://www.cnblogs.com/dashucoding/p/11140325.html 参考博客:https://ww ...

  6. Python之Web前端jQuery扩展

    Python之Web前端: 一. jQuery表单验证 二. jQuery扩展 三. 滚动菜单 一. jQuery表单验证: 任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证 ...

  7. web前端-----jQuery

    web前端之jQuery篇 一 jQuery是什么? [1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. [2]   j ...

  8. 8.31前端 jQuery

    2018-8-31 19:52:09 周末吧这几天课看完 结束前端!然后进行Django!!! 越努力,越幸运! day56 2018-03-16 1. 内容回顾 1. 样式操作 1. 操作class ...

  9. 前端-jQuery的ajax方法

    https://www.cnblogs.com/majj/p/9134922.html 0.什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascri ...

  10. Web前端JQuery基础

    JQuery知识汇总 一.关于Jquery简介          jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaS ...

随机推荐

  1. 转:C# WinForm窗体及其控件的自适应

    一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率>  ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...

  2. 编写带有点击特效的UIButton

    编写带有点击特效的UIButton 效果: 源码: // // ViewController.m // Button // // Created by XianMingYou on 15/1/18. ...

  3. 生活随记[All]

    1. 心灵鸡汤[all] 2. 工作总结 [all] 3. 面试经验[all] 4. 其他

  4. Linux 系统必须掌握的文件_【all】

    0.Linux 系统文件的详解 1.Linux 系统的网络配置文件 2.Linux 系统的DNS配置文件 3.Linux 系统的IP与域名解析文件[局域网的DNS] 4.Linux 系统的主机别名文件 ...

  5. 重置 Winsock:初始化计算机网络环境

    初始化网络环境,以解决由于软件冲突.病毒原因造成的参数错误问题(复杂网络环境下慎用).批处理代码: netsh winhttp reset proxy netsh winhttp reset trac ...

  6. JAVA入门之基础语言

    在上一章文章中,读者已经了解了如何搭建Java 开发环境及Java 程序的开发过程.从本篇文章开始讲解Java 的基本语言.这些基本语言的语法和其他一些编程语言相比有些是类似的,但还有很多不同之处,读 ...

  7. CSS盒子模型之CSS3可伸缩框属性(Flexible Box)

    CSS盒子模型(下) 一.CSS3可伸缩框(Flexible Box) 可伸缩框属性(Flexible Box)是css3新添加的盒子模型属性,有人称之为弹性盒模型,它的出现打破了我们经常使用的浮动布 ...

  8. 打造自己的移动绿色版 Python 环境

    本文只适用 Windows 系统,Linux,Mac 或其他系统可以直接自己写个脚本安装就好了,甚至大部分系统自带. 相信某些人写好了Python程序结果给朋友运行又得装个Python环境,难免失去了 ...

  9. ngRouter和ui-router区别

    在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的.本文主要对 AngularJS 原生的 ngRoute 路由模块和第三方路由模块 ui.router 的用法进行简单介绍,并做一个对比 ...

  10. PHP中对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.     当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...