前端之jQuery

1. jQuery概述

  • jQuery是一个javascript库,在它内部把几乎所有功能都做了封装
  • 在使用jQuery时,需要提前下载并应用jQuery之后,才能在代码中使用

1.1 jQuery的引入

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'/>
    <title>jQuery</title>
</head>
<body>
    <div class="body">
        <ul>
            <li id="login">登录</li>
            <li id="register">注册</li>
        </ul>
    </div>
    <!--引入jQuery-->
    <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
    <script>
        // 利用jQuery提供的功能获取标签文本
        var value = $('#login').text();
        console.log(value);
    </script>
</body>
</html>

1.2 DOM对象和jQuery对象

  • DOM对象和jQuery之间可以进行相互转换
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'/>
    <title>jQuery</title>
</head>
<body>
    <div id="content">hgzero</div>
    <!--引入jQuery-->
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script>
        // DOM操作
        // 获取文本
        var txt = document.getElementById('content').innerText;
        document.getElementById('content').innerText = '煞笔';
// jQuery操作 var text = $('#content').text(); $('#content').text('傻狗');
// Dom对象转换jQuery对象:$(dom对象) $(document.getElementById('content')) // jQuery对象转换成Dom对象:jQuery对象[0] $('#content')[0] </script> </body> </html>

2. 选择器

2.1 常用的选择器

$(document)            // 选择整个文档对象
$('li')                // 选择所有的li元素
$('#myId')             // 选择id为myId的网页元素
$('.myClass')          // 选择class为myClass的元素
$('input[name=first]') // 选择name属性等于first的input元素
$('#ul1 li span')      // 选择id为为ul1元素下的所有li下的span元素

2.2 表单选择器

1)html代码

<form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />
    <input type="file" />
    <input type="hidden" />
    <input type="image" />
    <input type="password" />
    <input type="radio" />
    <input type="reset" />
    <input type="submit" />
    <input type="text" />
    <select>
        <option>Option</option>
    </select>
    <textarea> </textarea>
    <button>Button</button>
</form>

2)jQuery代码

$(":text")          // 找到所有input标签
// $(":input")      找到所有input标签
// $(":password")   找到所有input且type=password的标签
// $(":radio")      找到所有input且type=radio的标签
// $(":checkbox")   找到所有input且type=checkbox的标签

3. 筛选器

  • 筛选器一般用于对选择器选中的标签进行再次筛选

3.1 对选择集进行修饰过滤

  • 类似CSS伪类
$('#ul1 li:first')  // 选择id为ul1元素下的第一个li
$('#ul1 li:odd')    // 选择id为ul1元素下的li的奇数行
$('#ul1 li:eq(2)')  // 选择id为ul1元素下的第3个li
$('#ul1 li:gt(2)')  // 选择id为ul1元素下的前三个之后的li
$('#myForm :input') // 选择表单中的input元素
$('div:visible')    // 选择可见的div元素

3.2 对选择集进行函数过滤

$('div').has('p');           // 选择包含p元素的div元素
$('div').not('.myClass');    // 选择class不等于myClass的div元素
$('div').filter('.myClass'); // 选择class等于myClass的div元素
$('div').first();            // 选择第1个div元素
$('div').eq(5);              // 选择第6个div元素

3.3 选择集转移

$('div').prev('p');        // 选择div元素前面的第一个p元素
$('div').next('p');        // 选择div元素后面的第一个p元素
$('div').closest('form');  // 选择离div最近的那个form父元素
$('div').parent();         // 选择div的父元素
$('div').children();       // 选择div的所有子元素
$('div').siblings();       // 选择div的同级元素
$('div').find('.myClass'); // 选择div内的class等于myClass的元素

4. 样式操作

4.1 操作行间样式

  • 选择器获取的多个元素,获取信息获取的是第一个,比如:$("div").css("width"),获取的是第一个div的width
// 获取div的样式
$("div").css("width");
$("div").css("color");


//设置div的样式
$("div").css("width","30px");
$("div").css("height","30px");
// 一次操作多个css样式
$("div").css({fontSize:"30px",color:"red"});

4.2 操作样式类名

$("#div1").addClass("divClass2")             // 为id为div1的对象追加样式divClass2
$("#div1").removeClass("divClass")           // 移除id为div1的对象的class名为divClass的样式
$("#div1").removeClass("divClass divClass2") // 移除多个样式
$("#div1").toggleClass("anotherClass")       // 重复切换anotherClass样式

5. 属性操作

5.1 html() 和 text()

1)html() 取出或设置html内容

// 取出html内容
var $htm = $('#div1').html();

// 设置html内容
$('#div1').html('<span>添加文字</span>');

2)text() 取出或设置text内容

// 取出文本内容
var $htm = $('#div1').text();

// 设置文本内容
$('#div1').text('<span>添加文字</span>');

5.2 attr() 

  • attr() 取出或设置某个属性的值
// 取出图片的地址
var $src = $('#img1').attr('src');

// 设置图片的地址和alt属性
$('#img1').attr({ src: "test.jpg", alt: "Test Image" });

5.3 val() 值

1)html代码

<input type="text" id="username">
<input type="text" class="a1" name="sex"><input type="text" class="a1" name="sex"><input type="text" class="a2" name="hobby">抽烟
<input type="text" class="a2" name="hobby">喝酒
<input type="text" class="a2" name="hobby">烫头
<select name="city" id="s1">
    <option value="1">北京</option>
    <option value="2">上海</option>
    <option value="3">深圳</option>
</select>
<select name="lover" id="s2">
    <option value="1">波多</option>
    <option value="2">苍井</option>
    <option value="3">小泽</option>
</select>

2)获取值

// 文本输入框:
    $('#username').val();
// 单选radio框:
    $('.a1:checked').val();
// 多选checkout框:
    $('.a2:checked').val()是不行的, 需要循环取值,如下:
        var d = $(':checkbox:checked');
            for (var i=0;i<d.length;i++){
                console.log(d.eq(i).val());
            }
// 单选select框:
    $('#city').val();
// 多选select框:
    $('#lover').val();

3)设置值

// 文本输入框:
    $('#username').val('you are my love');
// 单选radio框:
    $('.a1').val([2]);  // 注意里面必须是列表,写的是value属性对应的值
// 多选checkout框:
    $('.a2').val(['2','3'])
// 单选select框:
    $('#city').val('1');
// 多选select框:
    $('#lover').val(['2','3'])

5.4 prop() 属性

// HTML代码:
<input type="checkbox" id="i1" value="1">

// jQuery代码:
$("#i1").prop("checked")

// 结果:
false

6. jQuery元素节点操作

6.1 创建节点

var $div = $('<div>');
var $div2 = $('<div>这是一个div元素</div>');

6.2 插入节点

  • append() 和 appendTo():在现存元素的内部,从后面插入元素
    var $span = $('<span>这是一个span元素</span>');
    $('#div1').append($span);
    ......
    <div id="div1"></div>
  • prepend() 和 prependTo():在现存元素的内部,从前面插入元素
  • after() 和 insertAfter():在现存元素的外部,从后面插入元素
  • before() 和 insertBefore():在现存元素的外部,从前面插入元素

6.3 删除节点

1)empty 删除标签内部的标签

// HTML代码:
<div class="d1">
    <span>波多</span>
</div>

// jQuery代码:
$('.c1').empty()

// 结果:
<div class="d1">
</div>

2)remove 删除标签

// HTML代码:
<div class="d1">
    <span>波多</span>
</div>
<div>你好</div>

// jQuery代码:
$('.c1').remove()

// 结果:
<div>你好</div>

7. 事件

7.1 click事件

  • jQuery的链式调用:jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写
$('#btn1').click(function(){
    // 内部的this指的是原生对象
    // 使用jquery对象用 $(this)
})

7.2 jQuery特殊效果

  • hide() 隐藏元素
  • show() 显示元素
  • fadeIn() 淡入
  • fadeOut() 淡出
  • fadeToggle() 切换淡入淡出
  • toggle() 依次展示或隐藏某个元素
  • slideDown() 向下展开
  • slideUp() 向上卷起
  • slideToggle() 依次展开或卷起某个元素
$btn.click(function(){
        $('#div1').fadeIn(1000,'swing',function(){
            alert('done!');
        });
    });

7.3 jQuery动画

  • 通过animate方法可以设置元素某属性值上的动画,可以设置一个或多个属性值,动画执行完成后会执行一个函数
$('#div1').animate({
    width:300,
    height:300
},1000,swing,function(){
    alert('done!');
});

// 参数可以写成数字表达式:
$('#div1').animate({
    width:'+=100',
    height:300
},1000,swing,function(){
    alert('done!');
});

7.4 尺寸相关、滚动事件

1)获取和设置元素的尺寸

width()、height()                     # 获取元素width和height  
innerWidth()、innerHeight()           # 包括padding的width和height  
outerWidth()、outerHeight()           # 包括padding和border的width和height  
outerWidth(true)、outerHeight(true)   # 包括padding和border以及margin的width和height

2)获取元素相对页面的绝对位置

offse()

3)获取可视区高度

$(window).height();

4)获取页面高度

$(document).height();

5)获取页面滚动距离

$(document).scrollTop();  
$(document).scrollLeft();

6)页面滚动时事件

$(window).scroll(function(){  
    ......  
})

7.5 绑定事件

1)绑定事件&取消绑定事件

  • 绑定事件的其他方式
$(function(){
    $('#div1').bind('mouseover click', function(event) {
        alert($(this).html());
    });
});
  • 取消绑定事件
$(function(){
    $('#div1').bind('mouseover click', function(event) {
        alert($(this).html());

        // $(this).unbind();
        $(this).unbind('mouseover');

    });
});

2)主动触发与自定义事件

  • 主动触发
    • 可以使用jQuery对象上的trigger方法来触发对象上绑定的事件
  • 自定义事件
    • 除了系统事件外,可以通过bind方法自定义事件,然后用trigger方法触发这些事件
//给element绑定hello事件
element.bind("hello",function(){
    alert("hello world!");
});

//触发hello事件
element.trigger("hello");

7.6 事件冒泡

1)什么是事件冒泡

在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序;

如果没有定义此事件处理程序或者事件返回true,那么这个事件就会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)

2)事件冒泡的作用

事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。

3)阻止事件冒泡

  • 事件冒泡机制有时候是不需要的,需要阻止掉,通过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>

4)阻止默认行为

// 阻止右键菜单
$(document).contextmenu(function(event) {
    event.preventDefault();
});

5)合并阻止操作

一般把阻止冒泡和阻止默认行为合并起来写,合并写法可以用:return false

// event.stopPropagation();
// event.preventDefault();

// 合并写法:
return false;

7.7 事件委托

1)什么是事件委托

事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作。

事件委托首先可以极大的减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

2)一般绑定事件的写法

$(function(){
    $ali = $('#list li');
    $ali.click(function(event) {
        $(this).css({background:'red'});
    });
})
...
<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

3)事件委托的写法(delegate)

$(function(){
    $list = $('#list');
    $list.delegate('li', 'click', function(event) {
        $(this).css({background:'red'});
    });
})
...
<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

4)事件委托的写法(on)

  • 其实on和delegate只不过是开头两个参数的位置调换了一下而已
$(function(){
            $("#lists").on("click","li",function(event){
                var target = $(event.target);
                target.css("background-color","red");
            })
        })

5)取消事件委托

// ev.delegateTarge 委托对象
$(ev.delegateTarge).undelegate();

// 上面的例子可使用 $list.undelegate();

7.8 滚轮事件&函数节流

1)jquery.mousewhell插件

jquery中没有鼠标滚轮事件,原生js中的鼠标滚轮事件不兼容,可以使用jquery的滚轮事件插件jquery.mousewheel.js

2)函数节流

JavaScript中有些事件的触发频率非常高,比如onresize事件(jq中是resize),onmousemove事件(jq中是mousemove)以及上面说的鼠标滚轮事件,在短事件内多处触发执行绑定的函数,可以巧妙地使用定时器来减少触发的次数,实现函数节流。

 

posted @ 2020-08-01 16:57  Praywu  阅读(194)  评论(0编辑  收藏  举报