jQuery学习小结1-CSS操作+事件

一、DOM对象和jQuery 对象互换

1、jQuery对象

就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。比如:

$("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法这段代码等同于用DOM实现代码:document.getElementById("id").innerHTML;

  • 虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法. 乱使用会报错。比如:$("#test").innerHTML、document.getElementById("id").html()之类的写法都是错误的
  • 还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById("id")得到的DOM对象,这两者并不等价

2、jQuery对象转成DOM对象

两种转换方式将一个jQuery对象转换成DOM对象: [index]和.get(index);

(1)  jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。

(2)  jQuery本身提供,通过.get(index)方法,得到相应的DOM对象

3、DOM对象转成jQuery对象:

对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。$(DOM对象),转换后,就可以任意使用jQuery的方法了

jQuery学习小结1-CSS操作+事件
var $v=$("#v"); //jQuery对象
var v=$v.get(0); //DOM对象
alert(v.checked) //检测这个checkbox是否被选中
jQuery学习小结1-CSS操作+事件
  • 需要再强调注意的是:DOM对象才能使用DOM中的方法,jQuery对象是不可以用DOM中的方法。
  • 只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意
  • 由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。 如:
         $("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]
    这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法

二、多个库之间的冲突

1.jQuery在其他库之前导入,可直接使用jQuery,无需调用jQuery.noConflict()函数

jQuery学习小结1-CSS操作+事件
<script type="text/javascript" src="./jquery-1.4.2.js"></script>  
    <script type="text/javascript" src="./prototype-1.6.1.js"></script>
jQuery学习小结1-CSS操作+事件

2.jQuery在其他库之后导入,有两种方法:

“$”的所有权就归Base 库所有,创建一个“$$”符给jQuery 使用。

jQuery学习小结1-CSS操作+事件
var $$ = jQuery;              //创建一个$$的jQuery 对象
$(function () {                  //这是Base 的$
    alert($(‘#box‘).ge(0));      //这是Base 的$
    alert($$(‘#box‘).width());   //这是jQuery 的$$
});
jQuery学习小结1-CSS操作+事件

jQuery 提供了一个方法——noConflict:

jQuery学习小结1-CSS操作+事件
jQuery.noConflict();   
//将$符所有权剔除 var $$ =
 jQuery;    //自定义一个快捷给jQuery
$(function () {
    alert($(‘#box‘).ge(0));
    alert($$(‘#box‘).width());
});
jQuery学习小结1-CSS操作+事件
jQuery学习小结1-CSS操作+事件
jQuery.noConflict();    //将变量$的控制权移交给prototype.js  
    jQuery(function(){     //使用jQuery  
        jQuery("p").click(function(){  
            alert(jQuery(this).text());  
        });  
    });  
    $("pp").style.display=‘none‘;  //使用prototype  
    $j = jQuery.noConflict();  //自定义一个快捷给jQuery,将变量$的控制权移交给prototype.js  
    $j(function(){  //使用jQuery,利用自定义快捷$j  
        $j("p").click(function(){  
            alert($j(this).text());  
        });  
    });  
    $("pp").style.display=‘none‘;  //使用prototype
jQuery学习小结1-CSS操作+事件
jQuery学习小结1-CSS操作+事件
jQuery.noConflict();  //将变量$的控制权移交给prototype.js        
    
(function($){
        //定义匿名函数并设置形参为$  
        $(function(){   
//
匿名函数内部$均为jQuery  
            $("p").click(function(){alert($(this).text());});  
        });  
    })(jQuery);  
    $(“pp”).style.display=‘none‘;  //使用prototype   
    jQuery.noConflict();            //将变量$的控制权移交给prototype.js  
  
jQuery(function($){
             //使用jQuery加载页面函数  
        $(function(){                //内部继续使用$均为jQuery          
            $("p").click(function(){alert($(this).text());});      
        });  
    });  
    $("pp").style.display=‘none‘;  //使用prototype
jQuery学习小结1-CSS操作+事件

三、元素样式操作

1、遍历

在CSS 获取上,我们也可以获取多个CSS 样式,而获取到的是一个对象数组,如果用传统方式进行解析需要使用for in 遍历

jQuery学习小结1-CSS操作+事件
var box = $(‘div‘).css([‘color‘, ‘height‘, ‘width‘]);      //得到多个CSS 样式的数组对象
for (var i in box) { //逐个遍历出来
    alert(i + ‘:‘ + box[i]);
}
jQuery学习小结1-CSS操作+事件

jQuery 提供了一个遍历工具专门来处理这种对象数组,$.each()方法,这个方法可以轻松的遍历对象数组。

jQuery学习小结1-CSS操作+事件
$.each(box, function (attr, value) { //遍历JavaScript 原生态的对象数组
    alert(attr + ‘:‘ + value);
});
jQuery学习小结1-CSS操作+事件

使用$.each()可以遍历原生的JavaScript 对象数组,如果是jQuery 对象的数组怎么使用.each()方法呢?

jQuery学习小结1-CSS操作+事件
$(‘div‘).each(function (index, element) { //index 为索引,element 为元素DOM
    alert(index + ‘:‘ + element);
});
jQuery学习小结1-CSS操作+事件

2、传递参数

如果想设置某个元素的CSS 样式的值,但这个值需要计算我们可以传递一个匿名函数。

jQuery学习小结1-CSS操作+事件
$(‘div‘).css(‘width‘, function (index, value) {   //index 为索引,value为css值
    return (parseInt(value) - 500) + ‘px‘;
});
jQuery学习小结1-CSS操作+事件

3、切换样式

.toggleClass()方法的第二个参数可以传入一个布尔值

  • true 表示执行切换到class 类
  • false表示执行回默认class 类(默认的是空class),运用这个特性,我们可以设置切换的频率
    jQuery学习小结1-CSS操作+事件
    var count = 0;
    $(‘div‘).click(function () { //每点击两次切换一次red
        $(this).toggleClass(‘red‘, count++ % 3 == 0);
    });
    jQuery学习小结1-CSS操作+事件

默认的CSS 类切换只能是无样式和指定样式之间的切换,如果想实现样式1 和样式2之间的切换还必须自己写一些逻辑。

jQuery学习小结1-CSS操作+事件
$(‘div‘).click(function () {
    $(this).toggleClass(‘red size‘); //一开始切换到样式2
    if ($(this).hasClass(‘red‘)) { //判断样式2 存在后
        $(this).removeClass(‘blue‘); //删除样式1
    } else {
        $(this).toggleClass(‘blue‘); //添加样式1,这里也可以addClass
    }
});
jQuery学习小结1-CSS操作+事件

上面的方法较为繁琐,.toggleClass()方法提供了传递匿名函数的方式,来设置你所需要切换的规则。

jQuery学习小结1-CSS操作+事件
$(‘div‘).click(function () {
    $(this).toggleClass(
    function () {             //传递匿名函数,返回要切换的样式 
      return $(this).hasClass(‘red‘) ? ‘blue‘ : ‘red size‘;
    });
});
jQuery学习小结1-CSS操作+事件

上面虽然一句话实现了这个功能,但还是有一些小缺陷,因为原来的class 类没有被删除,只不过被替代了而已。所以,需要改写一下。

jQuery学习小结1-CSS操作+事件
$(‘div‘).click(function () {
    $(this).toggleClass(function () {
    if ($(this).hasClass(‘red‘)) {    // 更加局部化
        $(this).removeClass(‘red‘);
        return ‘green‘;
    } else {
        $(this).removeClass(‘green‘);
        return ‘red‘;
    }
    });
});
jQuery学习小结1-CSS操作+事件

对于.toggleClass()传入匿名函数的方法,还可以传递index 索引、class 类两个参数以及频率布尔值,可以得到当前的索引、class 类名和频率布尔值。

jQuery学习小结1-CSS操作+事件
var count = 0;
$(‘div‘).click(function () {
    $(this).toggleClass(function(index, className, switchBool) {
        alert(index + ‘:‘ + className + ‘:‘ + switchBool);        //得到当前值
        return $(this).hasClass(‘red‘) ? ‘blue‘ : ‘red size‘;
    },count++ % 3 == 0);                                         //增加第二个频率参数
});
jQuery学习小结1-CSS操作+事件

四、基础事件

1、绑定事件

bind(type, [data], fn)

  • type 表示一个或多个类型的事件名字符串
  • [data]是可选的,作为event.data 属性值传递一个额外的数据,这个数据是一个字符串、一个数字、一个数组或一个对象
  • fn 表示绑定到指定元素的处理函数
jQuery学习小结1-CSS操作+事件
//1. 使用点击事件
$(‘input‘).bind(‘click‘, function () {      //1.1 点击按钮后执行匿名函数
    alert(‘点击!‘);
});
//普通处理函数
$(‘input‘).bind(‘click‘, fn);               //1.2 执行普通函数式无须圆括号
function fn() {
    alert(‘点击!‘);
}
//2. 可以同时绑定多个事件
$(‘input‘).bind(‘mouseout mouseover‘, function () { //移入和移出分别执行一次
    $(‘div‘).html(function (index, value) {
        return value + ‘1‘;
    });
});
//3. 通过对象键值对绑定多个参数
$(‘input‘).bind({ //传递一个对象
     ‘mouseout‘ : function () { //事件名的引号可以省略
         alert(‘移出‘);
    },
    ‘mouseover‘ : function () {
         alert(‘移入‘);
    }
});
//4. 使用unbind 删除绑定的事件
$(‘input‘).unbind();    //删除所有当前元素的事件
//5. 使用unbind 参数删除指定类型事件
$(‘input‘).unbind(‘click‘); //删除当前元素的click 事件
//6. 使用unbind 参数删除指定处理函数的事件
function fn1() { alert(‘点击1‘);}
function fn2() {alert(‘点击2‘);}
$(‘input‘).bind(‘click‘, fn1);
$(‘input‘).bind(‘click‘, fn2);
$(‘input‘).unbind(‘click‘, fn1); //只删除fn1 处理函数的事件
jQuery学习小结1-CSS操作+事件

2. 简写事件

为了使开发者更加方便的绑定事件,jQuery 封装了常用的事件以便节约更多的代码。我们称它为简写事件

jQuery学习小结1-CSS操作+事件

jQuery学习小结1-CSS操作+事件

说明:

  • .mouseover()和.mouseout()表示鼠标移入和移出的时候触发,.mouseenter()和.mouseleave()表示鼠标穿过和穿出的时候触发,.mouseenter()和.mouseleave()这组穿过子元素不会触发,而.mouseover()和.mouseout()则会触发
  • .keydown()、.keyup()返回的是键码,而.keypress()返回的是字符编码
  • .focus()和.blur()分别表示光标激活和丢失,事件触发时机是当前元素。而.focusin()和.focusout()也表示光标激活和丢失,但事件触发时机可以是子元素。

3、复合事件

jQuery 提供了许多最常用的事件效果,组合一些功能实现了一些复合事件,比如切换功
能、智能加载等。

3.1 hover

//背景移入移出切换效果
$(‘div‘).hover(function () {
    $(this).css(‘background‘, ‘black‘); //mouseenter 效果
}, function () {
    $(this).css(‘background‘, ‘red‘); //mouseleave 效果,可省略
});

3.2 .toggle()这个方法比较特殊,这个方法有两层含义,第一层含义就是已经被1.8 版废用、1.9 版删除掉的用法,也就是点击切换复合事件的用法。第二层函数将会在动画那章讲解到。既然废弃掉了,就不应该使用。被删除的原因是:以减少混乱和提高潜在的模块化程度。

但你又非常想用这个方法,并且不想自己编写类似的功能,可以下载jquery-migrate.js文件,来向下兼容已被删除掉的方法。

我们也可以自己实现这个功能。

jQuery学习小结1-CSS操作+事件
var flag = 1; //计数器
$(‘div‘).click(function () {
if (flag == 1) { //第一次点击
    $(this).css(‘background‘, ‘black‘);
    flag = 2;
} else if (flag == 2) { //第二次点击
    $(this).css(‘background‘, ‘blue‘);
    flag = 3
    } else if (flag == 3) { //第三次点击
    $(this).css(‘background‘, ‘red‘);
    flag = 1
    }
});
jQuery学习小结1-CSS操作+事件

五、事件对象

5.1 事件对象

JavaScript 在事件处理函数中默认传递了event 对象,也就是事件对象。但由于浏览器的兼容性,开发者总是会做兼容方面的处理。jQuery 在封装的时候,解决了这些问题,并且还创建了一些非常好用的属性和方法。

jQuery学习小结1-CSS操作+事件
//通过处理函数传递事件对象
$(‘input‘).bind(‘click‘, function (e) {  //接受事件对象参数
    alert(e);
});
jQuery学习小结1-CSS操作+事件

jQuery学习小结1-CSS操作+事件

jQuery学习小结1-CSS操作+事件
jQuery学习小结1-CSS操作+事件
//通过event.type 属性获取触发事件名
$(‘input‘).click(function (e) {
    alert(e.type);
});
//通过event.target 获取绑定的DOM 元素
$(‘input‘).click(function (e) {
    alert(e.target);
});
//通过event.data 获取额外数据,可以是数字、字符串、数组、对象
$(‘input‘).bind(‘click‘, 123, function () { //传递data 数据
    alert(e.data); //获取数字数据
});
//  注意:如果字符串就传递:‘123‘、如果是数组就传递:[123,‘abc‘],如果是对象就传递:
{user : ‘Lee‘, age : 100}。数组的调用方式是:e.data[1],对象的调用方式是:e.data.user。
//event.data 获取额外数据,对于封装的简写事件也可以使用
$(‘input‘).click({user : ‘Lee‘, age : 100},function (e) {
    alert(e.data.user);
});
注意:键值对的键可以加上引号,也可以不加;在调用的时候也可以使用数组的方式:
    alert(e.data[‘user‘]);
//获取移入到div 之前的那个DOM 元素
$(‘div‘).mouseover(function (e) {
    alert(e.relatedTarget);
});
//获取移出div 之后到达最近的那个DOM 元素
$(‘div‘).mouseout(function (e) {
    alert(e.relatedTarget);
});
//获取绑定的那个DOM 元素,相当于this,区别与event.target
$(‘div‘).click(function (e) {
    alert(e.currentTarget);
});
各个参数说明案例
jQuery学习小结1-CSS操作+事件

说明: event.target 得到的是触发元素的DOM,event.currentTarget 得到的是监听元素的DOM。而this也是得到监听元素的DOM

  • 触发元素: 点击哪个就是哪个
  • 监听元素: 绑定哪个就是哪个

5.2 冒泡和默认行为

  • 阻止冒泡:event.stopPropagation();     这个方法设置到需要触发的事件上时,所有上层的冒泡行为都将被取消。
  • 阻止默认行为:event.preventDefault() ;比如:右击文本框输入区域,会弹出系统菜单、点击超链接会跳转到指定页面、点击提交按钮会提交数据。
    jQuery学习小结1-CSS操作+事件
    //禁止提交表单跳转
    $(‘form‘).submit(function (e) {
        e.preventDefault();
    });
    jQuery学习小结1-CSS操作+事件
  • 同时阻止默认行为且禁止冒泡行为 return false

jQuery学习小结1-CSS操作+事件

六、高级事件

 

 

jQuery学习小结1-CSS操作+事件,布布扣,bubuko.com

jQuery学习小结1-CSS操作+事件

上一篇:jquery 滚动加载


下一篇:TypeError: test() got multiple values for keyword argument 'key'