jQuery_one 一:认识jQuery  1、jQuery 的优点  2、window.onload和$(document).ready的对比 3、jQuery 对象和DOM对象的转换 4、解决jQuery和其他库的冲突 5、jQuery选择器 二:jQuery的DOM操作  三:jQuery的事件和动画

 1、jQuery 的优点

  (1)、轻量级

  (2)、链式操作方式

  (3)、隐式迭代

  (4)、不污染*变量

  (5)、可靠的事件处理机制

  (6)、完善的ajax,jQuery 所有的ajax操作封装到一个函数$.ajax()里面,使得开发者处理ajax的时候,能够专心处理业务逻辑,而无需关心复杂的浏览器兼容性和xml HTTPrequest对象的创建和使用的问题

 2、window.onload和$(document).ready的对比

  window.onload $(document).ready
执行时机  必须达到网页中所有的内容加载完毕之后(包括图片)才能执行  网页中所以DOM结构绘制完毕之后就执行,可能DOM元素关联的东西并没有加载完
编写个数

不能同时编写多个

以下是不正确的

 1 window.onload=function (){
 2 
 3   alert("hello");
 4 
 5 }
 6 
 7 window.onload=function (){
 8 
 9   alert("hello");
10 
11 }

能同时编写多个 

以下是正确的

 1 $(document).ready(function(){
 2 
 3   alert("hello");
 4 
 5 });
 6 
 7 $(document).ready(function(){
 8 
 9   alert("hello");
10 
11 });
简化写法

 

1 $(document).ready(function(){
2 
3   ....//
4 
5   ..//
6 
7 });

可以简写为:

1 $(function(){
2 
3   ...//
4 
5   ...//
6 
7 });

3、jQuery 对象和DOM对象的转换

(1)、jQuery 对象转换DOM对象的

方法一:jQuery对象是一个类似数组的对象,可以通过index的方法得到相应的DOM对象

 var $cr=$("#rc");//jQuery 对象
 var cr=$cr[0];//DOM对象
 alert(cr.checked)//检测checked是否被选中

方法二:对于一个DOM对象,只需要用$()把DOM对象包装起来就可以获得一个jQuery对象

var $cr=$("#rc");//jQuery 对象
var cr=$cr.get(0);//DOM对象
alert(cr.checked)//检测checked是否被选中

(2)、DOM对象的转换jQuery 对象

 var  cr=document.getElementById("cr");//DOM对学生
 var $cr=cr.get(0);//jQuery 对象

 用DOM方式来判断复选框是否被选中

$(document).ready(function (){//等待dom元素加载完毕
        var  $cr=$('#read');//jQuery对象
        var cr=$cr[0];//DOM对象,或者$cr.get[0]
        $cr.click(function (){
            if(cr.checked){//DOM方式判断
                alert ("感谢你的支出");
            }
        });
    });

用jQuery方式来判断复选框是否被选中

$(document).ready(function (){//等待dom元素加载完毕
        var  $cr=$('#read');//jQuery对象
        var cr=$cr[0];//DOM对象,或者$cr.get[0]
        $cr.click(function (){
            if($cr.is(":checked")){//jQuery方式判断
                alert ("感谢你的支出");
            }
        });
    });

以上演示了jQuery对象和DOM对象的不同,但最终的效果是一样的

4、解决jQuery和其他库的冲突

  在其他库和jQuery都被加载完毕之后,可以在任何时候调用noConflict()函数来将变量$的控制权移交给其他JavaScript库

var  $j=jQuery.noConflict();//自定义一个快捷方式
    $j(function (){//使用jQuery,利用自定义快捷方式——$j
        $j("p").click(function (){
            alert ("$j(this).text()");
        });
    });

 如果不想给jQuery自定义这些备用名称,还想使用$而不管其他库的$()方法,同时又不想与其他库冲突,那么可以使用以下两种解决方法

  其一:

jQuery.noConflict();//将变量的控制权给prototype.js
    jQuery(function ($){//使用jQuery设定页面加载是执行的函数
        $("p").click(function (){//在函数内部继续使用$()方法
            alert ("$(this).text()");
        });
    });

  其二:

jQuery.noConflict();//将变量的控制权给prototype.js
    (function ($) {//定义匿名函数并设置形参为$
        $(function () {//在匿名函数内部$均为jQuery
            $("p").click(function () {//继续使用$方法
                alert("$(this).text()");
            });
        });
    }());

最后一种方法是在其他库之前导入

5、jQuery选择器

(1)、css选择器

选择器 语法 描述 示例
标签选择器

p{

  CSS规则

}

以文档元素作为选择器

p{

  200px;

}

ID选择器

#id{

  CSS规则

}

以文档元素的唯一标识id作为选择器

#note{

  200px;

}

类选择器

.className{

  CSS规则

}

以文档元素class作为选择器 .note{

200px;

}

群组选择器

p,div,a{

  CSS规则

}

多个选择器应用同一个样式

p,div,a{

  200px;

}

后代选择器

E F{

  CSS规则

}

元素E的任意后代元素F

 #links a{

  color:red;

}

通配符选择器

*{

  CSS规则

}

以文档的所有元素

 *{

  padding:0;

}

伪类选择器

E:F{

  CSS规则

}

 指定要选择元素的特殊状态E:F

 li:first-child{

  color:red;

}

邻近选择器

p{

  CSS规则

}

 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器

 h1 + p {

  margin-top:50px;

}

属性选择器

p{

CSS规则

}

 选择有某个属性的元素

 input[type=text]{

  color:red;

}

子代选择器

p{

  CSS规则

}

 

与后代选择器相比,子元素选择器(Child selectors)只能选择作为某元素子元素的元素。
选择子元素
如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用子元素选择器

 li>a{

  color:red;

}

jQuery选择器的优势

document.getElementById('tt').style.css='red';

运行上面的代码,浏览器就会报错,原因是网页中没有id为“tt”的元素

改进后的代码如下:

if(document.getElementById("tt")){
document.getElementById("tt").style.color="red";

这样就可以避免浏览器报错但如果要操作的元素很多,可能对每个元素都要进行一次判断,大量重复的工作会使开发人员感到欣倦,而jQuery 在这方面问题上的处理是非常不错的,即使用

iOuery 获取网页中不存在的元素也不会报错,看下面的例子,代码如下:

$('#tt').css("color"."red");//这里无需判断$('#tt')是否存在

注意:$('#t)获取的永远是对象,即使网页上没有此元素。因此当要用jQuery检查某个元素在网页上是否存在时,不能使用以下代码:

if($("#tt")){
    //do something
}

而应该根据获取到元素的长度来判断,代码如下:

if($("#tt").length>0){
    //do something
}

或者转化成DOM 对象来判断,代码如下:

if($("#tt")[0]){
    //do something
}

例子:对多选框进行操作,输出选中的多选框的个数。

HTML 代码如下:

   <input type="checkbox" name="check" value="1" checked="checked">
    <input type="checkbox" name="check" value="2">
    <input type="checkbox" name="check" value="3" checked="checked">
    <input type="button" name="checked " value="你选中的个数" id="btn">

JavaScript 代码如下:

var btn = document.getElementById("btn");//获取id为btn的元素(button)
    btn.onclick = function () {//给元素添加onclick事件
        var arrays = new Array();//创建一个数组对象
        var items = document.getElementsByName("check");//获取name为check 的一组元素(checkbox)
        for (i = 0; i < items.length; i++) {//循环这组数据
            if (items[i].checked) {//判断是否选中
                arrays.push(items[i].value);//把符合条件的数据添加到数组中,push()是JavaScript 数组中的方法
            }
        }
        alert("你选中的个数" + arrays.length);
    }

(2)、基本选择器

描述 示例
改变id为one 的元素的背景色

$("#one").css("background"."#bbffaa");

改变class为mini的所有$(".mini")有元素的背景色

$(".mini").css("background"."#bbffaa"

改变元素名是<div>的$("div")所有元素的背景色 $("div").css("background"."#bbffaa");
改变所有元素的背景色 $("*").css("background"."#bbffaa");

改变所有的<span>元素和id为two的元素的背景色

$("span,#two").css("background"."#bbffaa");

 

 

 

 

 

 

 

 

(3)、层级选择器

描述 示例
改变<body>内所有<div>的背景色 $("body div").css("background","#bbffaa");
改变<body>内子<div>的背景色 $("body >div").css("background","#bbffaa");

改变class为one 的下一个<div>同辈元素的背景色

$(".one+div").css("background","#bbffaa");

改变id为two的元素后面的所有<div>辈元素的背景色辈元素的背景色

$("#two~div").css("background","#bbffaa");

 

 

 

 

 

 

 

在层级选择器中,第1个,第2个比较常用,而后面两个因为在iQuery里可以用更加简单的方法代替

可以使用next()方法来代替$('prev+next')

$('prev+next')//选择器与next()方法的等价
$(".one +div"):
$(".one").next("div");
$('prev~siblings')//选择器与nextAlI()方法的等价关系选择器
$("#prev~div");
$("#prev").nextA11("div");

例子:

//选取#prev 之后的所有同辈div元素
$("#prev.~div").css("background","#bbffaa");
//同上
$("#prev").nextA11("div").css("background","#bbffaa");
//选取#rev所有的同辈div元素,无论前后位置
$("#prev").siblings("div").css("background"."#bbffaa");

(4)、过滤选择器

4.1、基本过滤选择器

选择器 描述 示例
:first 选取第1个元素

$("div:first")选取所有<div>元素中第1个<div>元素

:last 选取最后一个元素 $("div:last")选取所有<div>元素中最后一个<div>元素
:not(selector) 去除所有与给定选择器匹配的元素 $("input:not(.myClass)")选取class不是myClass的<input>元素
:even 选取索引是偶数的所有元素 $("input:even")选取索引是偶数的
:odd 选取索引是奇数的所有元素 $("input:odd")选取索引是奇数的
:eq(index) 选取索引等于 index 的元素 $("input:eq(1)")选取索引等于1的<input>元素
:gt(index) 选取索引大于index 的元素(index从0开始) $("input:gt(1)")选取索引大于1的<input>元素(注:大于1,而不包括1)
:lt(index) 选取索引小于index 的元素(index从0开始) $("input:lt(1)")选取索引小于1的<input>元素(注:小于1,而不包括1)
:header 选取所有的标题元素,例如hl,h2,h3等等 $(":header")选取网页中所有的<h1><h2>
:animated 选取当前正在执行动画的元素 $("div:animated")选取正在执行动画的元素
:focus 选取当前获取焦点的元素 $(:focus')选取当前获取焦点的元素

 

 

 

 

 

 

 

 

 

 

 

 

4.2、内容过滤选择器

选择器 描述 示例
:contains(text) 选取含有文本内容为“text”的元素

$("div:contains('我')")选取含有文本“我"的<div>元素

:empty 选取不包含子元素或者文本的空元素

$("div:empty")选取不包含子元素(包括文本元素)的<div>空元素

:has(selector) 选取含有选择器所匹配的元素的元素 $("div:has(p)")选取含有<p>元素的<div>元素
:parent 选取含有子元素或者文本的元素

$("div:parent")选取拥有子元素(包括文本元素)的<div>元素

 

 

 

 

 

 

 

4.3、可见性选择器

选择器 描述 示例
:hidden 选取所有不可见的元素

$("hidden")选取所有不可见的元素。包括<inputtype="hidden"/>, <div style="display: none>
<div style="visibility:hidden;">等元素。如果只想选取<input>元素,可以使用$(" input:hidden")

:visible 选取所有可见的元素

$("div:visible")选取所有可见的<div>元素

4.4、属性过滤选择器

选择器 描述 示例
[attribute] 选取拥有此属性的元素 $(" div[id]")选取拥有属性id的元素
[attribute=value] 选取属性的值等于 value的元素

$(" div[title=test")选取属性 title为“test的<div>元素

[attribute!=value] 选取属性的值不等于 value的元素 $(" div[title!=test")选取属性 title不为“test的<div>元素

(注意:没有属性 title的<div>元素也会被选取)

[attribute^=value] 选取属性的值以 value开始的元素

$(" div[ltitle^=test]")选取属性 title以“test开始的<div>元素

[attribute$=value] 选取属性的值以 value结束的元素 $(" div[ltitle$=test]")选取属性 title以“test结束的<div>元素
[attribute*=value]

选取属性的值含有vaue的元素集合元素

$(" div[ltitle*=test]")选取属性 title有“test的<div>元素
[attribute|=value] 选取属性等于给定字符串或以该字符串为前级(该字符串后跟一个连字符“-”)的元素 $('divl[titlel="en"]')选取属性 title不等于en或以en为前缀(该字符串后跟一个连字连字符“-”)的元素
[attribute~=value] 选取属性用空格分隔的值中包含一个给定值的元素 $('div[title~="uk"]')选取属性 title用空格分隔的值中包含字符uk的元素
[attribute1][attribute2][attribute3]

用属性选择器合并成一个复合属性选择器,满足多个条件。每选择一次,缩小一次范围

$("div[id][title$='test']")选取拥有属性id并且属性title以“test”结束的<div>元素

4.5、子元素过滤选择器

选择器 描述 示例
:nth-child(index/even/odd) 选取每个父元素下的第 index个子元是从1开始的

eq( index)只匹配一个元素,而nth-child将为每个元素匹配子元素nth-child(index)的index是从1开始,:eq(index)index是从0开始

:first-child 选取每个父元素的第1个子元素

:first只返回单个元素,而 :first-child选择符将为每个父元素的匹配第1个子元素

例如s(" 'ul li:first-child");选取每个<ul>中第1个<li>

:last-child 选取每个父元素的最后一个子元素

:last只返回单个元素,而 :last-child选择符将为每个父元素的匹配最后一个子元素

例如s(" 'ul li:last-child");选取每个<ul>中最后一个<li>

:only-child

如果某个元素是它父元素中惟一的子元素,那么将会被匹配,如果父元素中含有其他元素,则不会被匹配

$("ul li:only-child")在ul中选取是唯一子元素的<li>元素

nth- childe选择器是很常用的子元素过滤选择器,详细功能如下。 (1)nth- child(even)能选取每个父元素下的索引值是偶数的元素。 (2) nth-child(od)能选取每个父元素下的索引值是奇数的元素。 (3)mnth- child(2)能选取每个父元素下的索引值等于2的元素 (4)nth- child(3n)能选取每个父元素下的索引值是3的倍数的元素,(n从1开始)。 (5) nth-child3n+1)能选取每个父元素下的索引值是(3n+1)的元素。(n从1开始

4.6、表单对象属性过滤选择器

选择器 描述 示例
:enabled 选取所有可用元素

s("# form1: enabled")选取id为“fom1”的表单内的所有可用元素

:disabled 选取所有不可用元素 s("# form1: disabled")选取id为“fom1”的表单内的所有不可用元素
:checked 选取所有被选中的元素(单选框复选框) $(input: checked)选取所有被选中的< input>元素
: selected

选取所有被选中的选项元素(下拉列表)

$("select option: selected");选取所有被选中的元素

 

4.7、表单选择器

选择器 描述 示例
:input 选取所有<input>、< textarea>、<select>和<button>元素 $(:input)
:text 选取所有的单行文本框 $(:text)
:password 选取所有的密码框 $(:password)
:radio 选取所有的单选按钮 $(:radio)
:checked 选取所有的复选框 $(:checked)
:submit 选取所有的提交按钮 $(:submit)
:image 选取所有的图像按钮 $(:image)
:button 选取所有的按钮 $(:button)
:file 选取所有的文件域 $(:file)
:hidden 选取所有的不可见元素 $(:hidden)
:reset 选取所有的重置按钮 $(:reset)

选择器的注意事项:如果选择器包含特殊符号 ".",".","#","(",或"]",需要用转义字符

<div id="one#">aa</div>//html代码
$('#one\#');//转义字符#

属性选择器@符号的问题:使用1.3.1版本以上的jQuery,不需要在属性前面加@符号

$("div[@title='test']");//错误写法
$("div[title='test']");//正确写法

选择器中的空格多一个或者少一个结果都会不一样

var $t_a=$(' test :hidden');//带空格的J0uery选择器
var $t_b=s('.test:hidden');//不带空格的J0uery选择器
var len_a= $t_a.length;
var len_b= $t_b.length;
alert("$('.test :hidden')="+len_a);//输出4
alert("$('.test:hidden')="+len_b);//输出3

二:jQuery的DOM操作

(1)、查找元素节点和属性节点

//html代码
<p title="选择你喜欢的水果">你最喜欢的水果</p>
    <ul>
        <li title="苹果">苹果</li>
        <li title="橘子">橘子</li>
        <li title="菠萝">菠萝</li>
    </ul>

JavaScript代码:

var lis=$('ul li:eq(1)');//获取ul里第二个li节点
var lis_text=lis.text();//获取第二个li元素节点的文本内容
alert (lis_text);//打印文本内容
var p_attr=$("p").attr("title");//获取p元素节点属性title
alert (p_attr);//打印文本内容

(2)、创建节点

   var li_1=$("<li></li>");//创建元素节点
    $('ul').append(li_1);//添加到ul中
    var li_2=$('<li>菠萝</li>');//创建带文本的节点
    $('ul').append(li_2);//添加到ul中
    var li_3=$('<li title="菠萝">菠萝</li>');//创建属性节点,title为属性节点
    $('ul').append(li_3);//添加到ul中

(3)、插入节点

 向每一个匹配的元素内容追加内容—— $("p").append("<b>李四</b>");//结果<p>我是<b>李四</b></p>
  $(A).appendTo(B)将A追加到B中——$("<b>李四</b>").appendTo("p");//结果<p>我是<b>李四</b></p>
  向每一个匹配的元素内部前置内容——$("p").prepend("<b>李四</b>");//结果<p><b>李四</b>我是</p>
  $(A).appendTo(B)将A前置B中——$("<b>李四</b>").prependTo("p");//结果<p><b>李四</b>我是</p>
  向每一个匹配的元素之后插入内容——$("p").after("<b>李四</b>");//结果<p>我是</p><b>李四</b>
  $(A).insertAfter(B)将A插入B后面——$("<b>李四</b>").insertAfter("p");//结果<p>我是</p><b>李四</b>
  向每一个匹配的元素之前插入内容——$("p").before("<b>李四</b>");//结果<b>李四</b><p>我是</p>
  $(A).insertBefore(B)将A插入B前面——$("<b>李四</b>").insertBefore("p");//结果<b>李四</b><p>我是</p>

(4)、删除节点

1. remove0方法:该方法会把该节点的所有后代 节点同时删除,返回的是已被删除节点的引用,因此可以继续使用

var lis=$('ul li:eq(1)').remove();//删除第二个li
lis.appendTo("ul");//把刚刚删除的添加到ul中
$('ul li:eq(1)').remove().appendTo("ul");//直接写到一行

2. detach()方法:与remove()方法一样,不同的是,所有绑定的事件和数据都会保留下来

var lis=$('ul li:eq(1)').detach();//删除第二个li
lis.appendTo("ul");//把刚刚删除的添加到ul中,如果使用remove的话,那么它之前绑定的事件会失效

3. empty()方法:并不是删除,而是清空节点,清空元素中所有后代节点

var lis=$('ul li:eq(1)').empty();//清空li里面的内容,节点还会存在

(5)、复制节点clone (): 该方法中传递的参数是true,表示深度克隆,会把所绑定的事件和后代节点同事复制

$('ul li').click(function (){
        $(this).clone (true).appendTo("ul");//复制当前点击的节点,追加到ul中
    });

(5)、替换节点:两个方法用法一样,位置不一样

替换之前已经为元素绑定了事件,替换后原先绑定的事件将会与被替换的元素一起消失

  $("p").replaceWith("hello");//把p额内容替换为hello
  $("<strong>hello</strong>").replaceAll("p");//注意:当使用replaceAll的时候,前面的要用标签如:strong包裹起来,不然就会被删除

(6)、包裹节点

 $("p").wrap("<div></div>");//用div把p包裹起来,单个包裹,一个p一个div
 $("p").wrapAll("<div></div>");//全部包裹
 $("p").wrapInner("<div></div>");//div在p里面,包裹在里面

(7)、属性操作

 $(p).attr("title");//获取p元素节点属性title
 $(p).attr("title","you");//给p元素的title属性设置单个值
 $(p).attr({"title":"you","name":"oso"});//给p元素的title属性设置单多个值
 $(p).removeAttr("title");//删除p元素的title属性

(8)、样式操作

 8.1、添加样式 attr和addClass的区别:

方法 addClass attr
用途 追加样式 设置样式
对同一个网页操作 <p>hello</p>
第一次使用方法
$('p').addClass('color');
       
 $('p').attr('class','font');
第一次结果 <p class="color">hello</p>
再次提交  $('p').addClass('font');
 $('p').attr('class','font');
最终结果 <p class="color font">hello</p> <p class="font">hello</p>

$('p').attr('class');//可以用attr来获取p元素, $('p').attr('class','font');//用attr来设置值
$('p').addClass('color'); //是追加样式

8.2、移除样式:removeClass

$('p').removeClass('color').removeClass('font');//可以调用两次
$('p').removeClass()//不带参数会把全部样式移除

8.3、切换样式:toggleClass

8.4、判断是否有某个样式:hasClass,有返回true,负责返回false,为了增强代码的可读性,在jQuery内部,实际上是调用了is()方法

$('p').hasClass('color');//等于$('p').is('color');

(9)设置和获取HTML,文本和值

9.1、html方法,此方法类似与js的innerHTML方法,可读取和设置HTML内容,可以用于xhtml文档,但不能用于xml文档

9.2、text方法,此方法类似与js的innerText方法,可读取和设置文本内容,可以用于xhtml文档和xml文档,Js的innerText的属性不能在firefox浏览器上运行,而jquery的text的方法支持所有的浏览器

9.3、val方法,此方法类似与js的value方法,可读取和设置元素的值

9.3.1、当地址框获取鼠标焦点时,如果地址框的值为“请输入邮箱地址”,则将地址框中的值清空

$('#input').focus(function(){//地址框获取鼠标焦点
            var inputValue=$(this).val();//得到当前文本框的值
            if(inputValue=='请输入邮箱地址'){//判断是否符合,则清空文本框}
                $(this).val('');
            }
        });

上面的例子可以使用表单元素的defaultValue属性来实现同样的功能,this.defaultValue,当前文本框的默认值

$('#input').focus(function(){
            var inputValue=$(this).val();
            if(inputValue==this.defaultValue){
                $(this).val('');
            }
        });

9.3.2、当地址框失去鼠标焦点时,如果地址宽的纸为空,则将地址框的值设置为“请输入邮箱地址”

$('#input').blur(function(){
            var inputValue=$(this).val();
            if(inputValue==''){
                $(this).val('请输入邮箱地址');
            }
        });

 val方法不仅能设置和获取元素的值,还有另外一个用途,就是它能使select, checkbox, radio相应的选项被选中,同样attr也可以实现同样的功能

$('#sel').val(['选择1号'])//选中2号,选择一个可用,可不用数组
$('#sel').val(['选择2号','选择3号']);//以数组的形式赋值
$(':radio').val(['radio1','radio2']);//CheckBox和radio要用数组的形式
$(':checkbox').val(['checkbox1','checkbox2']);

(10)、遍历节点

10.1、children:获取匹配元素的所有子元素的个数,只考虑子元素不考虑后代元素

10.2、next:取得匹配元素后面紧邻的同辈元素

10.3、prev:取得匹配元素前面紧邻的同辈元素

10.4、siblings:取得匹配元素前后所有的同辈元素

10.5、closest:取得最近的匹配元素检查当前元素是否匹配,如果匹配则返回,如果没有匹配则向上查找父元素,直到找到为止,如果没有找到,则会返回一个空,只返回匹配的第一个

10.6、parent:获取集合中每个匹配元素的附件,返回一个元素节点

10.7、parents:或者集合中每个匹配元素的祖先元素,返回多个父节点

(11)、cssDOM的操作:注意:如果只是数字,则会要加上像素值px,如果属性中带-符号,在设置的时候使用驼峰式写法fontSize

可以直接用css()方法,获取元素的样式,也可以设置样式,与attr方法一样

$('p').css({"fontSize":"50px","backgroundColor":"red"})

11.1、offset:有left和top,获取元素在当前视口的相对偏移值

11.2、position:有left和top,获取元素相对于最近的一个position样式,属性设置relative和absolute的祖父节点的相对便宜

11.3、scrollTop() 和scrollLeft()获取元素的滚动条距顶端和左侧的距离

$('p').height();//获取高度
$('p').height(500);//设置高度
$('p').offset().left;//获取p元素的offsetleft的值,元素必须设置了position为absolute或者relative
$('p').scrollTop()//获取元素的滚动条距顶端的距离

 三:jQuery的事件和动画

(1)、判定事件,下面三种是相等的

  $('p').click(function(){
        alert("a")
    });
    $('p').on('click',function(){
        alert("a")
    });
    $('p').bind('click',function(){
        alert("a")
    });