jquery.fn.extend与jquery.extend的区别和使用

没有评论

2010 年 10 月 12 日 at 下午 7:46分类:JavaScript

jQuery为开发插件提拱了两个方法,分别是:

JavaScript代码

  • jQuery.fn.extend(object);   
  • jQuery.extend(object);   
  • jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法。

    jQuery.fn.extend(object);给jQuery对象添加方法。

    fn 是什么东西呢。查看jQuery代码,就不难发现。

     JavaScript代码

  • jQuery.fn = jQuery.prototype = {      
  •    init: function( selector, context ) {//….    
  •   
  •    //……   
  •   
  • };   
  • 原来 jQuery.fn = jQuery.prototype.对prototype肯定不会陌生啦。

    虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便。

    jQuery便是一个封装得非常好的类,比如我们用 语句 $(“#btn1″) 会生成一个 jQuery类的实例。

    jQuery.extend(object); 为jQuery类添加添加类方法,可以理解为添加静态方法。如:

     XML/HTML代码

  • $.extend({   
  •   
  •   add:function(a,b){return a+b;}   
  •   
  • });   
  • 便为 jQuery 添加一个为 add 的 “静态方法”,之后便可以在引入 jQuery 的地方,使用这个方法了,

    JavaScript代码
  • $.add(3,4); //return 7  
  • jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。

    比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以这么做:

    JavaScript代码
  • $.fn.extend({        
  •         
  •      alertWhileClick:function(){        
  •        
  •          $(this).click(function(){        
  •        
  •               alert($(this).val());        
  •           });        
  •         
  •       }        
  •         
  • });        
  •         
  • $(“#input1″).alertWhileClick(); //页面上为:<input id=”input1″ type=”text”/>    
  • $(“#input1″) 为一个jQuery实例,当它调用成员方法 alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。

     真实的开发过程中,当然不会做这么小白的插件,事实上jQuery提拱了丰富的操作文档,事件,CSS ,Ajax、效果的方法,结合这些方法,便可以开发出更加 Niubility 的插件。

    自己写的练习:

    $(function(){
     $.extend({bin:function(a,b){
      return  a+b;
     }})
     var x = $.bin(3,4);
     //alert(x);
     $.fn.extend({
      yan:function(){
       $(this).click(function(){
        alert($(this).val());
       })
      }
     })
     $(“#button”).yan();
     //var b = $.browser;alert(b.opera); //返回浏览器的类型
     $.each( [0,1,2], function(i, n){ //遍历对象或者是数组或者是json数据:$.each( { name: “John”, lang: “JS” }, function(i, n){alert( “Name: ” + i + “, Value: ” + n ); });
      //alert( “Item #” + i + “: “+ n );
     });
     $.extend({change:function(array){ //自己写的一个让数组的组倒着显示的插件
      var arr = array;
      var ar  = new Array;
      for(var i = arr.length;i >= 0;i–){
       ar[i] = arr[arr.length - i];
      }
      return ar;
     }
     })
     var tempArr=[0,1,2];
     var b = $.change(tempArr);alert(b);
    })

    用PHP实现文件下载

    没有评论

    2010 年 10 月 12 日 at 下午 2:03分类:PHP | WEB开发

    //简单的用header头实现文件下载的例子:

    <?php
    // We’ll be outputting a PDF
    header(‘Content-type: application/pdf’);

    // It will be called downloaded.pdf
    //header(‘Content-Disposition: attachment; filename=”downloaded.pdf”‘);

    // The PDF source is in original.pdf
    readfile(‘original.pdf’);
    ?>

    //将整个过程写成一个函数如下:

    <?php
    function dl_file($file,$tag = true){
    if (!is_file($file) ) { die(“404 File not found!”); }
    $way = $tag ? ‘attachment’ : ‘inline’; //attachment就是以附件的方式打开,inline就是在线打开
    $len = filesize($file);
    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,”.”),1));

    switch( $file_extension ) {
    case “pdf”: $ctype=”application/pdf”; break;
    case “exe”: $ctype=”application/octet-stream”; break;
    case “zip”: $ctype=”application/zip”; break;
    case “doc”: $ctype=”application/msword”; break;
    case “xls”: $ctype=”application/vnd.ms-excel”; break;
    case “ppt”: $ctype=”application/vnd.ms-powerpoint”; break;
    case “gif”: $ctype=”image/gif”; break;
    case “png”: $ctype=”image/png”; break;
    case “jpeg”:
    case “jpg”: $ctype=”image/jpg”; break;
    case “mp3″: $ctype=”audio/mpeg”; break;
    case “wav”: $ctype=”audio/x-wav”; break;
    case “mpeg”:
    case “mpg”:
    case “mpe”: $ctype=”video/mpeg”; break;
    case “mov”: $ctype=”video/quicktime”; break;
    case “avi”: $ctype=”video/x-msvideo”; break;

    //The following are for extensions that shouldn’t be downloaded (sensitive stuff, like php files)
    case “php”:
    case “htm”:
    case “html”:
    case “txt”: die(“Cannot be used for “. $file_extension .” files!”); break;

    default: $ctype=”application/force-download”;
    }
    //Begin writing headers
    header(“Pragma: public”);
    header(“Expires: 0″);
    header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
    header(“Cache-Control: public”);
    header(“Content-Description: File Transfer”);

    //Use the switch-generated Content-Type
    header(“Content-Type: $ctype”);

    //Force the download
    //关键的参数就是Content-Disposition:$way
    //$way的值为attachment就是以附件的方式打开
    //$way的值为inline就是在线打开
    $header=”Content-Disposition: “.$way.”; filename=”.$filename.”;”;
    header($header );
    header(“Content-Transfer-Encoding: binary”);
    header(“Content-Length: “.$len);
    @readfile($file);
    exit;
    }
    dl_file(“original.pdf”);
    ?>

    header的用法

    没有评论

    2010 年 10 月 12 日 at 下午 1:22分类:PHP | WEB开发

    原文地址:http://hi.baidu.com/zhj2011/blog/item/14da6e1a356065d8ac6e7503.html

    标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头
      与 HTML 文件之间尚需空一行分隔。有关 HTTP 的详细说明,可以参 RFC 2068 官方文件
      (http://www.w3.org/Protocols/rfc2068/rfc2068)。在 PHP 中送回 HTML 资料前,需先
      传完所有的标头。
      
      注意: 传统的标头一定包含下面三种标头之一,并只能出现一次。
      
      Content-Type: xxxx/yyyy
      Location: xxxx:yyyy/zzzz
      Status: nnn xxxxxx
      
      在新的多型标头规格 (Multipart MIME) 方可以出现二次以上。
      
      使用范例
      
      范例一: 本例使浏览器重定向到 PHP 的官方网站。
        Header(“Location: http://www.php.net“;);
      exit;
      >?
      
      范例二: 要使用者每次都能得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头
      header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
      header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . “GMT”);
      header(“Cache-Control: no-cache, must-revalidate”);
      header(“Pragma: no-cache”);
      >?
      
      范例三: 让使用者的浏览器出现找不到档案的信息。
        header(“Status: 404 Not Found”);
      >?
      
      范例四:让使用者下载档案。
      
      header(“Content-type: application/x-gzip”);
      header(“Content-Disposition: attachment; filename=文件名\”);
      header(“Content-Description: PHP3 Generated Data”);
      ?>

    // fix 404 pages:
    header(‘HTTP/1.1 200 OK’);

    // set 404 header:
    header(‘HTTP/1.1 404 Not Found’);

    // set Moved Permanently header (good for redrictions)
    // use with location header
    header(‘HTTP/1.1 301 Moved Permanently’);

    // redirect to a new location:
    header(‘Location: http://www.example.org/’);

    // redrict with delay:
    header(‘Refresh: 10; url=http://www.example.org/’);
    print ‘You will be redirected in 10 seconds’;

    // you could also use the HTML syntax:// <meta http-equiv=”refresh” content=”10;http://www.example.org/ />

    // override X-Powered-By: PHP:
    header(‘X-Powered-By: PHP/4.4.0′);
    header(‘X-Powered-By: Brain/0.6b’);

    // content language (en = English)
    header(‘Content-language: en’);

    // last modified (good for caching)
    $time = time() – 60; // or filemtime($fn), etc
    header(‘Last-Modified: ‘.gmdate(‘D, d M Y H:i:s’, $time).’ GMT’);

    // header for telling the browser that the content
    // did not get changed
    header(‘HTTP/1.1 304 Not Modified’);

    // set content length (good for caching):
    header(‘Content-Length: 1234′);

    // Headers for an download:
    header(‘Content-Type: application/octet-stream’);
    header(‘Content-Disposition: attachment; filename=”example.zip”‘);
    header(‘Content-Transfer-Encoding: binary’);

    // load the file to send:readfile(‘example.zip’);
    // Disable caching of the current document:
    header(‘Cache-Control: no-cache, no-store, max-age=0, must-revalidate’);
    header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’);

    // Date in the pastheader(‘Pragma: no-cache’);
    // set content type:
    header(‘Content-Type: text/html; charset=iso-8859-1′);
    header(‘Content-Type: text/html; charset=utf-8′);
    header(‘Content-Type: text/plain’);

    // plain text file
    header(‘Content-Type: image/jpeg’);

    // JPG picture
    header(‘Content-Type: application/zip’);

    // ZIP file
    header(‘Content-Type: application/pdf’);

    // PDF file
    header(‘Content-Type: audio/mpeg’);

    // Audio MPEG (MP3,…) file
    header(‘Content-Type: application/x-shockwave-flash’);

    // Flash animation// show sign in box
    header(‘HTTP/1.1 401 Unauthorized’);
    header(‘WWW-Authenticate: Basic realm=”Top Secret”‘);

    print ‘Text that will be displayed if the user hits cancel or ‘;
    print ‘enters wrong login data’;?>[/codes]

    global和$GLOBALS[]的区别

    没有评论

    2010 年 10 月 12 日 at 上午 9:19分类:PHP

    转自:http://blog.csdn.net/wangking717/archive/2009/10/10/4648769.aspx

    很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。

    根据官方的解释是

    1.$GLOBALS['var']是外部的全局变量本身

    2.global $var是外部$var的同名引用或者指针。

    举例说明一下:

    1. <?php  
    2. $var1 = 1;  
    3. $var2 = 2;  
    4. function test(){  
    5.     $GLOBALS['var2'] = &$GLOBALS['var1'];  
    6. }  
    7. test();  
    8. echo $var2;  
    9. ?>  

    正常打印结果为1

    1. <?php  
    2. $var1 = 1;  
    3. $var2 = 2;  
    4. function test(){  
    5.     global $var1,$var2;  
    6.     $var2 = &$var1;  
    7. }  
    8. test();  
    9. echo $var2;  
    10. ?>  

    意外打印结果为2

    为什么会打印结果为2呢?其实就是因为$var1的引用指向了$var2的引用地址。导致实质的值没有改变。

    我们再来看一个例子吧。

    1. <?php  
    2. $var1 = 1;  
    3. function test(){  
    4.     unset($GLOBALS['var1']);  
    5. }  
    6. test();  
    7. echo $var1;  
    8. ?>  

    因为$var1被删除了,所以什么东西都没有打印。

    1. <?php  
    2. $var1 = 1;  
    3. function test(){  
    4.     global  $var1;  
    5.     unset($var1);  
    6. }  
    7. test();  
    8. echo $var1;  
    9. ?>  

    意外的打印了1。证明删除的只是别名|引用,起本身的值没有受到任何的改变。

    明白了吧?

    也就是说global $var其实就是$var = &$GLOBALS['var']。调用外部变量的一个别名而已