JS高级第二天:

来源:互联网 发布:沙漠靴品牌知乎 编辑:程序博客网 时间:2024/05/16 06:43

1.自定义事件:

 

/**
 * 自定义事件
 *   1、事件就是dom对象的一个属性而已
 *   2、事件必须绑定在一个对象上
 *   3、可以对对象上的事件进行声明
 *   4、该事件的触发
 *   5、事件的参数的传递
 *       当定义事件的时候,是形参
 *       当事件被触发的时候,实参
 */
/**
 * 1、在div上声明一个属性(该属性也是事件),该事件的名称为:上海传智播客第四期很牛
 */

$().ready(function(){
 /**
  * unbind的参数为事件的名称
  * bind的参数有两个
  *    1、事件的名称
  *    2、触发该事件要执行的内容
  */

 $("#aaa").unbind("上海传智播客第四期很牛");
 $("#aaa").bind("上海传智播客第四期很牛",function(event,json){//event是jquery自带的参数
  alert("就是牛");
  alert(json.a);
  alert(json.b);
 });
 
 $("#aaa").unbind("click");
 $("#aaa").bind("click",function(){
  /**
   * 触发"上海传智播客第四期很牛"事件
   * this:因为click事件和上海传智播客第四期很牛事件在一个对象上
   */

  $(this).trigger("上海传智播客第四期很牛",{
   a:1,b:2
  });
 });
});

自定义事件2:

/**
 * 写一个函数,该函数有两个参数
 *    1、事件的名称
 *    2、事件的处理函数
 */
/**
 * 函数的功能
 *    1、绑定该事件
 *    2、当点击div的时候,触发该事件
 *    3、该事件输出div的内容,并且以参数的形式进行传递
 */

function eventHandler(eventName,callback){
 /**
  * 1、找到该div
  * 2、给div动态的添加一个事件,事件的名称为"eventName"
  * 3、触发该事件
  */
 //自定义事件的声明

 $("#aaa").unbind(eventName);
 $("#aaa").bind(eventName,function(event,value){
  callback(event,value);
 });
 
 //在什么时候触发自定义事件
 $("#aaa").unbind("click");
 $("#aaa").bind("click",function(){
  $(this).trigger(eventName,$(this).text());
 });
}
$().ready(function(){
 eventHandler("itcast",function(event,value){
  alert(value);
 });
});


游览器内部事件的参数是固定的,而自定义参数是可以自己定义的,这是内部事件和自定义事件最大的区别。
自定义jquery中的each方法遍历DIV

/**
 * 用jQuery最原始的方法each遍历页面上的div
 */

//$().ready(function(){
// $("div").each(function(){
//  alert($(this).text());
// });
//});
(function($){
 $.fn.itcastShEach = function(callback){
  var array = $(this);
  for(var i=0;i<array.length;i++){
   /**
    * 这种写法相当于给回调函数传递了一个参数
    *    该参数就是数组中正在遍历的对象
    */

   //callback(array.get(i));
   //array.get(i).callback();
   //array.get(i)就是当前正在遍历的对象
   callback.call(array.get(i));
  }
 }
})($);
$().ready(function(){
// $("div").itcastShEach(function(val){
//  alert($(val).text());
// });
 $("div").itcastShEach(function(){
  alert($(this).text());
 });
});


自定义extend
/**
 * 写一个方法,extend,实现插件开发
 */

(function($){
 $.fn.myextend = function(json){
  for(var i in json){
   $.fn[i] = json[i];
  }
 }
 
 $.extend = function(json){
  for(var i in json){
   $[i] = json[i];
  }
 }
})($);
$().ready(function(){
 $.extend({
  a:1,
  b:2,
  c:3
 });
 
 alert($.a);
});


重写alert

(function(jQuery){
 $.myalert = function(){
  alert("aaaa");
 }
})($);
(function(jQuery){
 //fn==prototype
 $.fn.myalert = function(){
  alert("aaaa");
 }
})($);
$().ready(function(){
 $.myalert();
 $("body").myalert();
});


把页面上删除的超级链接的弹出框封装成一个插件

/**
 * 把页面上删除的超级链接的弹出框封装成一个插件
 */
(function($){
 $.myconfirm = function(){
  /**
   * 遍历当前页面上每一个超级链接
   */
  $("a").each(function(){
   if($(this).text()=="删除"){
    $(this).unbind("click");
    $(this).bind("click",function(){
     if(window.confirm("您确认要删除吗?")){
      return true;
     }else{
      return false;
     }
    });
   }
  });
 }
})($);
$().ready(function(){
 $.myconfirm();
});


 

jquery的内核

1、结构

   

//把所有的内容写在匿名函数中

    //可以把最核心的内容进行封装,这些核心的内容在外部是没有办法访问的

   (function(window){

        //jQuery是一个函数、对象、构造器函数

        var jQuery = function( selector, context ) {

             // The jQuery object is actually just the init constructor 'enhanced'

            return new jQuery.fn.init( selector, context );

        }

        //利用jQuery的选择器创建出来的对象就相当于利用jQuery的构造器创建出来的对象

       jQuery.fn = jQuery.prototype = {

            each:function(){

            },

            ready:function(){

            }

        }

        window.jQuery = window.$ = jQuery;

        //window.jQuery.prototype=$.fn=$.prototype=window.$.fn=jQuery.fn

   })(window);


2、如果把一个属性加在jQuery上,外部可以利用jQuery访问该属性

    

(function(jQuery){

         jQuery.alert = window.alert;

     })(jQuery);


   把加在jQuery对象本身上的属性成为jQuery的全局插件的开发

   把加在jQuery对象原型上的属性称为jQuery的对象插件的开发

       如果开发的插件和页面上的元素有关系,则用对象插件

       如果开发的插件和页面上的元素没有关系,则用全局插件

 


0 0