JQuery

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的不同
  1. 入口函数 $(匿名函数)
  2. 元素的获取 $()
  3. 显示隐藏 show()/hide()
  4. 内容操作 html()
  5. 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>
总结:
  1. 以后如果出现创建新元素,那么绑定事件的时候最好用事件委托。
  2. 冒泡: 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();

以上内容仅供参考 -_- …为作者边学习,边摘抄和总计的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值