jquery是一个函数库,一个js文件,页面用script标签引入这个js文件就可以使用。
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
官方网站:http://jquery.com/
中文网:http://jquery.cuishifeng.cn/
js与JQuery的不同
- 入口函数 $(匿名函数)
- 元素的获取 $()
- 显示隐藏 show()/hide()
- 内容操作 html()
- JQuery两大特性 链式编程/隐式迭代
原生js入口函数:
window.onload = function(){
......
};
JQuery入口函数:
$(document).ready(function(){
......
});
简写为:
$(function(){
......
});
$ = jQuery
上面也可写成:
jQuery(function(){
......
})
原生js显示盒子,并设置内容
<script>
window.onload = function(){
// 1.获取元素
var btn = document.getElementById('btn')
var divArr = document.getElementsByTagName('div')
// 2.绑定事件
btn.onclick = function(){
// 3.遍历数组,获取每一个div,然后操作让他们显示,并设置内容
for(var i=0;i<divArr.length;i++){
// 显示
divArr[i].style.display = 'block';
// 设置内容
divArr[i].innerHTML = '显示显示'
}
}
}
</script>
......
<button id="btn">显示盒子</button>
<div></div>
<div></div>
<div></div>
JQuery实现,显示盒子,并设置内容
<script src="js/jquery-1.11.1.js"></script>
<script>
// 2.JQuery入口函数
$(function(){
// 3.获取元素,绑定事件
$('#btn').click(function(){
// 显示盒子,并设置内容能: JQuery两大特点: 隐式迭代,连式编程。
$("div").show().html('忠厚传家久,诗书济世长...')
// show(): 显示标签(style.display)。 html(): 设置内容。(innerHMTL)
})
})
</script>
......
<button id="btn">显示盒子</button>
<div></div>
<div></div>
<div></div>
jquery选择器
jquery选择器可以快速地选择元素,选择规则和css样式相同,使用length属性判断是否选择成功。
$('#myId') //选择id为myId的网页元素
$('.myClass') // 选择class为myClass的元素
$('li') //选择所有的li元素
$('#ul1 li span') //选择id为为ul1元素下的所有li下的span元素
$('input[name=first]') // 选择name属性等于first的input元素
对选择集进行过滤
$('div').has('p'); // 选择包含p元素的div元素
$('div').eq(5); //选择下标为5的div元素
选择集转移
$('#box').prev(); //选择id是box的元素前面紧挨的同辈元素
$('#box').prevAll(); //选择id是box的元素之前所有的同辈元素
$('#box').next(); //选择id是box的元素后面紧挨的同辈元素
$('#box').nextAll(); //选择id是box的元素后面所有的同辈元素
$('#box').siblings(); //选择id是box的元素的同级元素
$('#box').parent(); //选择id是box的元素的父元素
$('#box').children(); //选择id是box的元素的所有子元素
$('#box').find('.myClass'); //选择id是box的元素内的class等于myClass的元素
$("#box").index(); // 元素在父盒子中,所有子元素排列对应的索引值
判断是否选择到了元素
jquery有容错机制,即使没有找到元素,也不会出错,可以用length属性来判断是否找到了元素,length等于0,就是没选择到元素,length大于0,就是选择到了元素。
var $div1 = $('#div1');
var $div2 = $('#div2');
alert($div1.length); // 弹出1
alert($div2.length); // 弹出0
......
<div id="div1">这是一个div</div>
样式操作
操作行间样式
// 获取div的样式
$("div").css("width");
$("div").css("color");
//设置div的样式
$("div").css("width","30px");
$("div").css("height","30px");
$("div").css({fontSize:"30px",color:"red"});
选择器获取的多个元素,获取信息获取的是第一个,比如:$(“div”).css(“width”),获取的是第一个div的width。
操作样式类名
$("#div1").addClass("divClass2") //为id为div1的对象追加样式divClass2
$("#div1").removeClass("divClass divClass2") //移除多个样式
$("#div1").toggleClass("anotherClass") //重复切换anotherClass样式
绑定click事件
给元素绑定click事件
$('#btn1').click(function(){
// 内部的this指的是原生对象
// 使用jquery对象用 $(this)
})
自定义动画
通过animate方法可以设置元素某属性值上的动画,可以设置一个或多个属性值,动画执行完成后会执行一个函数。
/*
animate参数:
参数一:要改变的样式属性值,写成字典的形式
参数二:动画持续的时间,单位为毫秒,一般不写单位
参数三:动画曲线,默认为‘swing’,缓冲运动,还可以设置为‘linear’,匀速运动
参数四:动画回调函数,动画完成后执行的匿名函数
*/
// 第一个参数必传
$('#div1').animate({
width:300,
height:300
},1000,'swing',function(){
alert('done!');
});
jquery特殊效果
fadeIn() 淡入
fadeOut() 淡出
fadeToggle() 切换淡入淡出
slideDown() 向下展开
slideUp() 向上卷起
slideToggle() 依次展开或卷起某个元素
hide() 隐藏元素
show() 显示元素
toggle() 切换元素的可见状态
<script>
$(window).ready(function(){
// 绑定事件演示
$("button").click(function(){
// 1.show()/hide()/toggle(): 显示隐藏
// $("div").show(1000, function(){
// alert('已完成')
// }) // 无参直接显示。 带参就变为动画。 可以写回调函数
// 隐藏一样
// $("div").hide(1000)
// 切换一样
// $("div").toggle(1000)
// 2.slideDown()/slideUp()/slideToggle(): 滑入滑出(卷帘门)
// $("div").slideDown(1000,function(){
// alert('已完成')
// }) // 无参默认400毫秒, 可以写回调函数
// 滑出
// $("div").slideUp(1000)
// 切换
// $("div").slideToggle(1000)
// 3.fadeIn()/fadeOut()/fadeToggle() / fadeTo() : 淡入淡出
// $("div").fadeIn(1000,function(){
// alert('已完成')
// }) // 无参默认400毫秒, 可以写回调函数
// 淡出
// $("div").fadeOut()
// 切换
// $("div").fadeToggle()
// 半透明程度: 必须传递时间
// $("div").fadeTo(400, 0.4)
})
})
</script>
......
<button>特殊动画</button>
<div style="width:200px; height:200px; background:red"></div>
jquery链式调用
jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写:
$('#div1') // id为div1的元素
.children('ul') //该元素下面的ul子元素
.slideDown('fast') //高度从零变到实际高度来显示ul元素
.parent() //跳到ul的父元素,也就是id为div1的元素
.siblings() //跳到div1元素平级的所有兄弟元素
.children('ul') //这些兄弟元素中的ul子元素
.slideUp('fast'); //高度实际高度变换到零来隐藏ul元素
属性操作
attr(), prop()
对于自定义属性:attr()可以获取自定义属性值,prop()获取不到自定义属性值返回undefined
获取值没有的情况下:attr()返回undefined,prop()返回false
<script>
$(function(){
// 属性操作: 1.普通属性 2.特殊属性。
// 1.普通属性: id/title/src/href/name...
// 1.1 attr(): 操作普通属性。
// console.log($("input").attr('id')) // 获取值
// $("input").attr('name', 'bbb') // 赋值
// 1.2 prop(); selcted/checked/disabled
// console.log($("option").eq(1).attr('selected')) // 没有返回undefined
// $("option").eq(1).attr('selected', 'selected') // 操作不方便
console.log($("option").eq(1).prop('selected')) // false
$("option").eq(1).prop('selected', true) // 选中
$("option").eq(1).prop('selected', false) // false: 设置为不选中
// 总结: 普通属性用attr(), 表单属性: prop()
// 2.特殊属性。innerHTML/className/style/value...
// 原生js -- > jquery
// innerHTML --> html()
// className --> addClass()/removeClass()/toggleClass()
// style --> css()
// value --> val()
// 验证!!!
// html()
// console.log($('#box').html()) //获取值
// $('#box').html('我是div') //赋值
// var str1 = $("input").val() // 获取值
// console.log(str1)
// $("input").val('我是input的赋值') // 赋值
})
</script>
......
<input type="text" id="aaa" name="haha" value="111">
<select name="" id="">
<option value="0">北京</option>
<option value="0">上海</option>
<option value="0">广州</option>
<option value="0">深圳</option>
</select>
<div id="box">div</div>
jquery事件
事件函数列表:
blur() 元素失去焦点
focus() 元素获得焦点
click() 鼠标单击
mouseover() 鼠标进入(进入子元素也触发)
mouseout() 鼠标离开(离开子元素也触发)
mouseenter() 鼠标进入(进入子元素不触发)
mouseleave() 鼠标离开(离开子元素不触发)
hover() 同时为mouseenter和mouseleave事件指定处理函数
ready() DOM加载完成
submit() 用户递交表单
正则表达式
正则表达式的写法
var re=new RegExp(‘规则’, ‘可选参数’);
var re=/规则/参数;
规则中的字符
1)普通字符匹配:
如:/a/ 匹配字符 ‘a’,/a,b/ 匹配字符 ‘a,b’
2)转义字符匹配:
\d 匹配一个数字,即0-9
\D 匹配一个非数字,即除了0-9
\w 匹配一个单词字符(字母、数字、下划线)
\W 匹配任何非单词字符。等价于[^A-Za-z0-9_]
\s 匹配一个空白符
\S 匹配一个非空白符
\b 匹配单词边界
\B 匹配非单词边界
. 匹配一个任意字符
var sTr01 = '123456asdf';
var re01 = /\d+/;
//匹配纯数字字符串
var re02 = /^\d+$/;
alert(re01.test(sTr01)); //弹出true
alert(re02.test(sTr01)); //弹出false
量词:对左边的匹配字符定义个数
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次
任意一个或者范围
[abc123] : 匹配’abc123’中的任意一个字符
[a-z0-9] : 匹配a到z或者0到9中的任意一个字符
限制开头结尾
^ 以紧挨的元素开头
$ 以紧挨的元素结尾
修饰参数:
g: global,全文搜索,默认搜索到第一个结果接停止
i: ingore case,忽略大小写,默认大小写敏感
常用函数
test
用法:正则.test(字符串) 匹配成功,就返回真,否则就返回假
正则默认规则
匹配成功就结束,不会继续匹配,区分大小写
常用正则规则
//用户名验证:(数字字母或下划线6到20位)
var reUser = /^\w{6,20}$/;
//邮箱验证:
var reMail = /^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$/i;
//密码验证:
var rePass = /^[\w!@#$%^&*]{6,20}$/;
//手机号码验证:
var rePhone = /^1[34578]\d{9}$/;
事件冒泡
什么是事件冒泡
在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
事件冒泡的作用
事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。
阻止事件冒泡
事件冒泡机制有时候是不需要的,需要阻止掉,通过 event.stopPropagation() 来阻止
$(function(){
var $box1 = $('.father');
var $box2 = $('.son');
var $box3 = $('.grandson');
$box1.click(function() {
alert('father');
});
$box2.click(function() {
alert('son');
});
$box3.click(function(event) {
alert('grandson');
event.stopPropagation();
});
$(document).click(function(event) {
alert('grandfather');
});
})
......
<div class="father">
<div class="son">
<div class="grandson"></div>
</div>
</div>
阻止默认行为
阻止表单提交
$('#form1').submit(function(event){
event.preventDefault();
// return false;
})
合并阻止操作
阻止冒泡和阻止默认行为合并起来写,合并写法可以用
// event.stopPropagation();
// event.preventDefault();
// 合并写法:
return false;
事件委托
事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。
$(function(){
// 问题: 新创建出来的元素,没有老事件。
// 1.点击按钮,在ul中创建一个新的li标签。
$("button").click(function(){
// 创建新标签。
var str = '<li class="newBg">我是新创建的li标签</li>'
$("ul").html($("ul").html() + str)
})
// // 整个页面的li标签绑定点击事件,新创建出来的标签没有点击事件
// $("li").click(function(){
// alert('我是li标签')
// })
// 让新创建出来的标签也有事件,就是事件委托!!!
// 方法1: 事件委托。
$('ul').delegate('li','click',function(){
alert(111)
})
// 方法2: 事件委托
// $("ul").on('click', 'li', function(){
// alert(222)
// })
// 无事件委托
// $("li").on('click', function(){
// alert(222)
// })
// 无事件委托: click(); $('li').bind('click', function(){})
// 有事件委托: delegate(); on()
})
</script>
......
<button>添加li标签</button>
<ul>
<li>我是原生土著li1</li>
<li>我是原生土著li2</li>
<li>我是原生土著li3</li>
</ul>
总结:
- 以后如果出现创建新元素,那么绑定事件的时候最好用事件委托。
- 冒泡: a.出问题的时候学会取消/阻止冒泡。 b.知道事件委托的底层原理就是冒泡。
DOM操作
Dom操作也叫做元素节点操作,它指的是改变html的标签结构,它有两种情况:
1、移动现有标签的位置
2、将新创建的标签插入到现有的标签中
创建新标签
var $div = $('<div>'); //创建一个空的div
$div.html('这是一个div元素')
// var $div2 = $('<div>这是一个div元素</div>');
移动或者插入标签的方法
1、append()和appendTo():在现存元素的内部,从后面放入元素
var $span = $('<span>这是一个span元素</span>');
$('#div1').append($span);
......
<div id="div1"></div>
2、prepend()和prependTo():在现存元素的内部,从前面放入元素
3、after()和insertAfter():在现存元素的外部,从后面放入元素
4、before()和insertBefore():在现存元素的外部,从前面放入元素
删除标签
$('#div1').remove();
以上内容仅供参考 -_- …为作者边学习,边摘抄和总计的内容