jQuery是一个快速的、小型的、具有丰富功能的JavaScript库。它的出现使得网页中的DOM、事件、动画、Ajax等操作变得更加简单。“写更少的代码,做更多的事儿”是jQuery一直坚信的开发理念。


>引入jQuery

官方下载

<scripts src="path/to/jquery.xx.js" > </script>

引入 jQuery 库,实际就是向网页添加了一个新的函数$(jQuery)。

$ 是 jQuery 中的核心函数,jQuery 的所有功能都是通过该函数来进行的,

>jQuery 的核心函数

作为工具使用

  • jQuery.contains()

  • jQuery.isArray()

  • jQuery.isFunction()

  • jQuery.isNumeric()

  • ……

var num = 10
fuction fn(){}
console.log($.isFunction(num)) // false
console.log($.inFunction(fn))  // true

作为函数使用

$(function(){
  alert("核心函数执行了~~")
}) //文档加载完毕后执行

alert("核心函数外部~~")
<button id="btn"></button>
<button id="btn01"></button>
$(function(){
  $("#btn").click(function(){
    alert("你点了我哦~")
  })
})

需要注意的是,通过 jquery 核心函数查询到的结果并不是原生 DOM,而是经过包装的新对象,我们称之为 jquery 对象。

jquery对象中为我们提供了很多新的方法,方便我们做各种DOM 操作 ,但是jquery对象不能直接调用原生 DOM 对象的方法。

通过我们为 jquery 对象命名时,会使用$开头加以区分。

var $box1 = $("#box1") // 获取id为box1的元素
var $news = $(".news") // 获取class为news的元素
var $hello = $("[title=hello]") // 获取title属性为hello的元素
$(function () {

    $("#btn").click(function () {

        // alert("你点我干嘛~~")

        var btn = document.getElementById("btn01"); // [object HTMLButtonElement]

        var $btn = $("#btn01"); // [object Object]

    });
});

将 DOM 对象作为参数

可以将 DOM 对象转换为 jquery 对象,从而使用 jquery 对象的方法。

var box1 = document.getElementById("box1") // 获取DOM对象
var $box1 = $(box1) // 转换为jQuery对象
 $(function () {

    $("#btn").click(function () {

        // alert("你点我干嘛~~")

        var btn = document.getElementById("btn01"); // [object HTMLButtonElement]

        var $btn = $("#btn"); // [object Object]
        
        alert($(btn))

    });
});

将 HTML 代码作为参数

会根据 html 代码来创建元素

$(function () {

    $("#btn").click(function () {

        var $h1 = $("<h1>我是一个标题</h1>"); // 会根据html代码创建元素

        $("div").append($h1);

    });
});

>jQuery对象

通过 jQuery 核心函数获取到的对象就是jQuery对象。

jQuery对象是jQuery中定义的对象,可以将其理解为是DOM对象的升级版;在jQuery对象中为我们提供了很多简单易用的方法,来帮助我们简化DOM操作。

- jQuery对象本质上是一个DOM对象的数组(类数组)
  可以通过索引获取jQuery对象中的DOM对象

<button id="btn01">点我一下</button>
<ul>
    <li id="swk">孙悟空</li>
    <li id="zbj">猪八戒</li>
    <li>沙和尚</li>
    <li>唐僧</li>
    <li>白骨精</li>
</ul>

<script>
  $("#btn01").click(function () {
      var $li = $("li")
      // alert($li[0].textContent)
      
      var text = $li.text() // 读取文本,返回所有标签中的文本
      var id = $li.attr("id") // 读取属性时,返回第一个标签的属性
      alert(id)
  })
</script>

隐式迭代

当我们修改jQuery对象时,它会自动修改jQuery中的所有元素,这一特点称为jQuery的隐式迭代。

<script>
  $("#btn01").click(function () {
      var $li = $("li")    
      $li.text("新的文本内容")
  })
</script>

链式调用

通常情况下,jQuery对象方法的返回值依然是一个jQuery对象。所以我们可以在调用一个方法后,继续调用其他的jQuery对象的方法。这一特性,称为jQuery对象的 链式调用

<script>
  $("#btn01").click(function () {
      var $li = $("li")
      $li.text("新的文本内容").css({"color":"red"})
  })
</script>

>选择器集合

基础选择器

选择器

名称

举例

id选择器

$("ID属性值")

选择 id 为指定的元素对象

类选择器

$(".class属性值")

选择 class 为指定值的元素

元素选择器

$("标签名/元素名")

选择所有指定标签元素的对象

选择所有元素

$("*")

选中页面中所有的元素的对象

组合选择器

选择器1,选择器2...

选择指定选择器中的元素对象

<div id="mydiv1" class="blue">元素选择器</div>
<div id="mydiv1">id选择器1<span>span中的内容</span></div>
<span class="blue">样式选择器</span>
<script>

// id选择器
var $mydiv = $("#mydiv");
console.log($mydiv)

// 类选择器
var $class = $(".blue")
console.log($class)

// 元素选择器
var $span = $("span")
console.log($span)

// 通用选择器
var $all = $("*")
console.log($all)

</script>

层次选择器

选择器

名称

举例

后代选择器

$("父元素 指定元素")

选择父元素的所有指定元素(包含第一代、第二代)

子代选择器

$("父元素 > 指定元素")

选择父元素的所有第一代指定元素

相邻选择器

$("元素 + 指定元素")

选择元素下一个指定元素(如果元素不存在,则获取不到)

同辈选择器

$("元素 ~ 指定元素")

选择元素下面的所有指定元素

表单选择器

Forms

名称

举例

表单选择器

:input

查找所有的input元素:$(":input");

注意:会匹配所有的input、textarea、select和button元素。

文本框选择器

:text

查找所有⽂本框:$(":text")

密码框选择器

:password

查找所有密码框:$(":password")

单选按钮选择器

:radio

查找所有单选按钮:$(":radio")

复选框选择器

:checkbox

查找所有复选框:$(“:checkbox”)

提交按钮选择器

:submit

查找所有提交按钮:$(“:submit”)

图像域选择器

:image

查找所有图像域:$(“:image”)

重置按钮选择器

:reset

查找所有重置按钮:$(“:reset”)

按钮选择器

:button

查找所有按钮:$(“:button”)

⽂件域选择器

:file

查找所有⽂件域:$(“:file”)

>操作属性的元素

获取属性 attr

固有属性:元素本身就有的属性(id、name、class、style),返回值是 Boolean 的属性:checked、selected、disabled

自定义属性:用户自己定义的属性

方法

说明

attr(属性名)

设置/获取元素的指定属性

prop(属性名)

获取具有 true和false的属性值

所以,attr()和prop()的区别是什么?

  1. 如果是固有属性,attr 和 prop 方法均可操作。

  2. 如果是自定义属性,attr 可操作,prop 不可操作。

  3. 如果返回值是 boolean 类型的属性,若设置了属性,attr 返回具体的值,prop 返回 true,反之 undefined 和 false。

<input abd="aabbcc" checked="checked" id="aa" name="ch" type="checkbox"/> aa
<input id="bb" name="ch" type="checkbox"/> bb

<script>
    var name = $("#aa").attr("name");
    console.log(name); //ch
    var name2 = $("#aa").prop("name");
    console.log(name2); //ch
    // 返回值是 boolean 的属性 (元素设置了属性)
    var c1 = $("#aa").attr("checked");
    console.log(c1); //checked
    var c2 = $("#aa").prop("checked");
    console.log(c2); //true
    // 返回值是 boolean 的属性 (元素未设置属性)
    var c3 = $("#bb").attr("checked");
    console.log(c3); //undefined
    var c4 = $("#bb").prop("checked");
    console.log(c4); //false
    // 自定义属性
    var abc1 = $("#aa").attr("abd");
    console.log(abc1); //aabbcc
    var abc2 = $("#aa").prop("abd");
    console.log(abc2); //undefined
</script>

设置属性 prop

<input abd="aabbcc" checked="checked" id="aa" name="ch" type="checkbox"/> aa
<input id="bb" name="ch" type="checkbox"/> bb

<script>
    // 固有属性
    $('#aa').attr("value", "123");
    $('#bb').prop("value", "456");
    // 返回值是 boolean 的属性
    $('#aa').attr("checked", false);
    $('#bb').prop("checked", "checked");
    // 自定义属性
    $('#aa').attr("username", "admin");
    $('#bb').prop("username", "guest"); // prop() 不会解析 boolean 值
</script>

移除属性 removeAttr

方法

说明

removeAttr(”属性名“)

移除元素的指定属性

<script>
    var name = $("#aa").removeAttr("checked");
</script>

总结:

如果属性的类型是 boolean,则使用 prop( )方法,反之使用 attr( )方法。

>操作元素的样式

方法

说明

attr("class")

获取 class 属性的值,即样式名称

attr("class","样式名")

修改 class 属性的值,会覆盖原始样式

addClass(”样式名“)

添加样式的名称

css( )

添加具体的样式

removeClass("样式名")

移除样式名称

添加元素的具体样式

1))css({'样式名':'样式值','样式名2','样式值2'})

例:css({'background-color':'red','color':'#fff'});

2)css('样式名','样式值')

例:css('color','white')

<script>
    $("#aa").attr('color','blue');
    $("#aa").addClass('px-2');
    $("#aa").css({'background-color':'red','color':'#fff'});
    $("#aa").removeClass("px-2")
</script>

>操作元素的内容

方法

说明

html( )

获取元素的 html 内容(非表单元素)

html("html","内容")

设置元素的 html 内容(非表单元素)

text( )

获取元素的文本内容,不包含 html(非表单元素)

text("html","内容")

设置元素的文本内容,不包含 html (非表单元素)

var( )

获取元素value 值(表单元素)

var('值')

设定元素的 value 值(表单元素)

表单元素:

文本框 text;密码框 password;单选框 radio;复选框 checkbox;隐藏域 hidden;文本域 textarea;下拉框select

非表单元素:

div;span;h1~h6;ul;li...

<div id="html1"></div>
<div id="html2"></div>
<div id="text"></div>
<input type="text" name="username" id="oop" value="oop" /> 

<script>
    // 非表单元素
    $("#html1").html("青岛");
    $("#html2").html("<h2>TsingTao<h2>");
    $("#text").text("山东") //山东
    $("#text").text("<h2>TsingTao<h2>") // <h2>TsingTao<h2>
    // 表单元素
    $("#oop").var("青岛啤酒")
</script>

>创建与添加元素

创建元素

方法

说明

$('元素内容')

$('<p>欢迎来到青岛</p>')

<script>
    var p = $('<p>欢迎来到青岛</p>')
</script>

添加元素

方法

说明

(指定元素).prepend("内容")

在指定元素内部的最前面追加内容

$("内容").prependTo("指定元素")

把内容追加到指定元素内部最前面

(指定元素).append"内容")

在指定元素内部最后面追加内容

$("内容").appendTo("指定元素")

把内容追加到指定元素内部最后面

$("元素").before( )

在指定元素的前面追加内容

$("元素").after( )

在指定元素的后面追加内容

$("元素").wrap()

为当前元素添加一个容器

$("元素").wrapAll()

为当前所有元素统一添加一个容器

$("元素").wrapInner()

为当前元素添加一个内部容器

<div id="html"></div>
<div id="text"></div>

<script>
    // 创建元素
    var test = "<span class='bg-black text-sm'>china</span>"
    $("html").prepend(test)
    $(test).prependTo("#html")

    var test2 = "<span class='bg-black text-sm'>TsingTao</span>"
    $("#text").before("test2")
</script>

>删除元素

方法

说明

$("元素").remove()

完全删除(事件清空)

$("元素").empty()

清空所有的子元素

$("元素").detach()

删除元素(不会清空事件)

$("元素").unwrap()

删除外层父元素

<div id="html"></div>
<div id="text"></div>

<script>
    $("html").remove()
    $("text").detach()
</script>

>复制元素

方法

说明

$("元素").clone()

用来复制 jQuery 对象

<button id="btn"> 点我一下 </button>

<ul id="list">
    <li>孙悟空</li>
    <li>猪八戒</li>
</ul>

<ul id="list2">
    <li>沙和尚</li>
    <li>唐僧</li>
</ul>


<script>
    $(function(){
    
        $("#list li:nth-child(1)").click(function(){
            alert("孙悟空")
        })
    
        var $swk = $("#list li:nth-child(1)").clone(true)
        var $list2 = $("#list2")
    
        $("#btn").click(function(){
            $list2.append($swk)
        })
    })  
</script>

>筛选方法

方法

说明

$("元素").eq( )

获取 jQuery 对象中指定索引的元素

$("内容").first( )

获取第一个元素

$("元素").last( )

获取最后一个元素

$("元素").even( )

获取索引为偶数的元素

$("元素").odd( )

获取索引为基数的元素

$("元素").slice( )

截取元素(切片)

$("元素").filter( )

过滤筛选元素

<button id="btn"> 点我一下 </button>

<div class="box1"></div>
<div class="box1"></div>
<div class="box1 a"></div>
<div class="box1 a"></div>
<div class="box1"></div>

<script>
    $(function(){ 
        $("#btn").click(function(){
           $(".box1").eq()
           $(".box1").filter(".a").css("background-color", "#bfa")
        })
    })  
</script>

>事件绑定

通过@指定方法

<a href="#">超链接</a>

<script>
    $(function(){ 
        $(".a").click(function(event){
             event.stopPropagation()
             event.preventDefault()
        })
    })  
</script>

通过 on( ) 方法

<button id="btn1"> 点我一下 </button>
<button id="btn2"> 点我一下 </button>

<div class="box1"></div>
<div class="box1"></div>
<div class="box1"></div>
<div class="box1"></div>
<div class="box1"></div>

<script>
     // on()可以通过on()方法来绑定事件
     $("#btn1").on("click.a", function(){
          alert("通过on绑定的事件!")
     })

     // off()可以用来取消事件绑定
     $("#btn2").on("click.a", function(){
          $("#btn1").off("click")
     })
     // 为所有box1的类添加事件委托
     $(document).on("click",".box1", function(event){
         alert("哈哈")
     })  
</script>

通过 one( ) 方法

<script>
    // one()用来绑定一个一次性的事件
    $(".box1").one("click", function(){
        alert('嘻嘻')
    })
</script>

>jQuery方法

.addClass()

.hasClass()

.toggleClass()

.insertAfter()

.insertBefore()

.replaceAll()

.replaceWith()

.height()

.width()

.innerHeight()

.innerWidth()

.outerHeight()

.outerWidth()

.offset()

.position()

.scrollLeft()

.scrollTop()

.has()

.is()

.map()

.add()

.addBack()

.contents()

.end()

.not()

.children()

.closest()

.find()

.next()

.nextAll()

.nextUntil()

.offsetParent()

.parent()

.parents()

.parensUntil()

.prev()

.prevAll()

.prevUntil()

.siblings()