zoukankan      html  css  js  c++  java
  • DHL:jQuery框架学习使用总结,插件,继续中...

    1.基础知识:jQuery事件与事件对象【文章来自学IT网:http://www.xueit.com/html/2009-05/33_2020_00.html

    事件是javascript的灵魂: document.getElementById("testDiv2").onclick = showMsg;     
        function showMsg(event)        {            alert("!!!");        } 
      等效于:<div id="testDiv1" onclick="alert("!!!");">单击事件 1</div> 
    我们常用的修改元素属性添加事件的方式, 
    实际上是建立了一个匿名函数:document.getElementById("testDiv1").onclick = function(event){    alert("!!!");};
    这个匿名函数的签名和我们手写的showMsg签名相同,
     所以可以把showMsg直接赋值给onclick.这种方式的弊端是:
    1. 只能为一个事件绑定一个事件处理函数.  使用"="赋值会把前面为此时间绑定的所有事件处理函数冲掉.
    2. 在事件函数(无论是匿名函数还是绑定的函数)中获取事件对象的方式在不同浏览器中要特殊处理:IE中,事件对象是window对象的一个属性.
    事件处理函数必须这样访问事件对象:       
     obj.onclick=function()        {            var oEvent = window.event;        }
    在DOM标准中,事件对象必须作为唯一参数传给事件处理函数:      
      obj.onclick=function()        {            var oEvent = arguments[0];        } 
     jQuery中的事件有了jQuery,  我们有了处理对象事件的一系列函数.
      上面基础知识还是要懂, 但是再也不用自己去实现处理多播事件委托的函数了.
      正所谓有了jQuery, 天天喝茶水. 下面是在jQuery中最常使用的bind()方
    法举例:$("#testDiv4").bind("click", showMsg);我们为id是testDiv4的元素, 
    添加列click事件的事件处理函数showMsg. 使用jQuery事件处理函数的好处:
    1. 添加的是多播事件委托.  也就是为click事件又添加了一个方法, 不会覆盖对象的click事件原有的事件处理函数.       
         $("#testDiv4").bind("click", function(event) { alert("one"); });         
       $("#testDiv4").bind("click", function(event) { alert("two"); });单击testDiv4对象时,
     依次提示"one"和"two".
    2. 统一了事件名称.  添加多播事件委托时, ie中是事件名称前面有"on". 但是使用bind()函数我们不用区分ie和dom ,  
    因为内部jQuery已经帮我们统一了事件的名称.
    3. 可以将对象行为全部用脚本控制. 让HTML代码部分只注意"显示"逻辑. 现在的趋势是将HTML的行为, 内容与样式切分干净. 
    其中用脚本控制元素行为, 用HTML标签控制元素内容, 用CSS控制元素样式. 使用jQuery事件处理函数可以避免在HTML标签上直接添加事件. 
    


     2. 对事件的总结中,

    $("#testDiv").click(function(event) { alert("test div clicked ! "); });等效于:$("#testDiv").bind("click", function(event) { alert("test div clicked ! "); });
    触发单击事件:
    $("#testDiv").click();等效于$("#testDiv").trigger("click");

    hover 事件是 mouseover 和 mouseout 两个事件。 所以hover方法是两个参数。如:

    代码
    $("#text1").hover(function(){
    //移到元素上添加CSS
    $(this).addClass("hover");
    }, function(){
    //移开元素上删除CSS
    $(this).removeClass("hover");
    });

     

    如果只想写鼠标的进入或离开的动作时用jquery的mouseenter和mouseleave事件。(为了避免冒泡问题,不要注册mouseover 和 mouseout)

     


     3. this关键词:

    当触发任何事件处理程序时,关键词this引用的都是携带相应行为的COM元素。而$()函数可以将一个DOM元素作为参数,就可以方便的使用$(this),为相应的元素创建一个jQuery对象,就如同css选择符找到该元素一样了。

    附: 

    JQuery this 和 $(this) 的区别

    $("#textbox").hover( 
         
    function() { 
              
    this.title = "Test"
          }, 
         
    fucntion() { 
             
    this.title = "OK”; 
      
        } 
    );

    这里的this其实是一个Html 元素(textbox),textbox有text属性,所以这样写是完全没有什么问题的。
    但是如果将this换成$(this)就不是那回事了,Error--报了。

    Error Code:
    $("#textbox").hover(
           function() {
              $(this).title = "Test";
           },
           function() {
              $(this).title = "OK";
           }
    );

    这里的$(this)是一个JQuery对象,而jQuery对象沒有title 属性,因此这样写是错误的。

    JQuery拥有attr()方法可以get/set DOM对象的属性,所以正确的写法应该是这样:

    正确的代码:
    $("#textbox").hover(
          function() {
             $(this).attr(’title’, ‘Test’);
          },
          function() {
             $(this).attr(’title’, ‘OK’);
          }
    );

    使用JQuery的好处是它包裝了各种浏览器版本对DOM对象的操作,因此统一使用$(this)而不再用this应该是比较不错的选择。

     4. 常用方法

     

    jQuery中常用的函数方法总结

    jQuery中为我们提供了很多有用的方法和属性,自己总结的一些常用的函数,方法。个人认为在开发中会比较常用的,仅供大家学习和参考。

    事件处理 

    ready(fn)

    代码
    $(document).ready(function(){
      // Your code here...
    });


    作用:它可以极大地提高web应用程序的响应速度。通过使用这个方法,可以在DOM载入就绪能够读取并操纵时立即调用你所绑定的函数,而99.99%的JavaScript函数都需要在那一刻执行。

    bind(type,[data],fn)

     代码
    $("p").bind("click", function(){
      alert( $(this).text() );
    });


    作用:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数。起到事件监听的作用。

    toggle(fn,fn)
    代码:

    $("td").toggle(
      function () {
        $(this).addClass("selected");
      },
      function () {
        $(this).removeClass("selected");
      }
    );


    作用:每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。挺有趣的一个函数,在动态实现某些功能的时候可能会用到。

    (像click(),focus(),keydown()这样的事件这里就不提了,那些都是开发中比较常用到的。)


    外观效果

    addClass(class)和removeClass(class)

    代码
    $(".stripe tr").mouseover(function(){ 
                   $(this).addClass("over");}).mouseout(function(){
                   $(this).removeClass("over");})
    });
    也可以写成:
    $(".stripe tr").mouseover(function() { $(this).addClass("over") });
    $(".stripe tr").mouseout(function() { $(this).removeClass("over") });


    作用:为指定的元素添加或移除样式,从而实现动态的样式效果,上面的实例中实现鼠标移动双色表格的代码。

    css(name,value)

    代码:
    $("p").css("color","red");


    作用:很简单,就是在匹配的元素中,设置一个样式属性的值。这个个人感觉和上面的addClass(class)有点类似。

    slide(),hide(),fadeIn(), fadeout(), slideUp() ,slideDown()

    代码

    $("#btnShow").bind("click",function(event){ $("#divMsg").show() });
    $("#btnHide").bind("click",function(evnet){ $("#divMsg").hide() });

    作用:jQuery中提供的比较常用的几个动态效果的函数。还可以添加参数:show(speed,[callback])以优雅的动画显示所有匹配的元素,并在显示完成后可选地触发一个回调函数。

    animate(params[,duration[,easing[,callback]]])

     
    作用:制作动画效果用到的函数,功能非常的强大,可以连续使用此函数。

    查找筛选

    map(callback)
    HTML 代码:
    <p><b>Values: </b></p>
    <form>
      <input type="text" name="name" value="John"/>
      <input type="text" name="password" value="password"/>
      <input type="text" name="url" value="http://ejohn.org/%22/>
    </form>
    jQuery 代码:
    $("p").append( $("input").map(function(){
      return $(this).val();
    }).get().join(", ") );
    结果:
    [ <p>John, password, http://ejohn.org/%3C/p> ]

     
    作用:将一组元素转换成其他数组(不论是否是元素数组)你可以用这个函数来建立一个列表,不论是值、属性还是CSS样式,或者其他特别形式。这都可以用'$.map()'来方便的建立。

    find(expr)

    HTML 代码:

    <p><span>Hello</span>, how are you?</p>
    jQuery 代码:

    $("p").find("span")
    结果:

    [ <span>Hello</span> ]


    作用:搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。

    文档处理

    attr(key,value)
    HTML 代码:
    <img/><img/>
    jQuery 代码:
    $("img").attr("src","test.jpg");


    作用:取得或设置匹配元素的属性值。通过这个方法可以方便地从第一个匹配元素中获取一个属性的值。如果元素没有相应属性,则返回 undefined 。在控制HTML标记上是必备的工具。


    html()/html(val)
    HTML 代码:
    <div><p>Hello</p></div>
    jQuery 代码:
    $("div").html();
    结果:
    <p>Hello</p>


    作用:取得或设置匹配元素的html内容,同类型的方法还有text()和val()。前者是取得所有匹配元素的内容。,后者是获得匹配元素的当前值。三者有相似的地方常用在内容的操作上。

    wrap(html)
    HTML 代码:
    <p>Test Paragraph.</p>
    jQuery 代码:
    $("p").wrap("<div class='wrap'></div>");
    结果:
    <div class="wrap"><p>Test Paragraph.</p></div>

     
    作用:把所有匹配的元素用其他元素的结构化标记包裹起来。
    这种包装对于在文档中插入额外的结构化标记最有用,而且它不会破坏原始文档的语义品质。 可以灵活的修改我们的DOM。

    empty()
    HTML 代码:
    <p>Hello, <span>Person</span> <a href="#">and person</a></p>
    jQuery 代码:
    $("p").empty();
    结果:
    <p></p>


    作用:删除匹配的元素集合中所有的子节点。

    Ajax处理

    load(url,[data],[callback])
    url (String) : 待装入 HTML 网页网址。
    data (Map) : (可选) 发送至服务器的 key/value 数据。
    callback (Callback) : (可选) 载入成功时回调函数。

    代码:

    $("#feeds").load("feeds.aspx", {limit: 25}, function(){
       alert("The last 25 entries in the feed have been loaded");
     });


    作用:载入远程 HTML 文件代码并插入至 DOM 中。这也是Jquery操作Ajax最常用最有效的方法。


    serialize()
    HTML 代码:
    <p id="results"><b>Results: </b> </p>
    <form>
      <select name="single">
        <option>Single</option>
        <option>Single2</option>
      </select>
      <select name="multiple" multiple="multiple">
        <option selected="selected">Multiple</option>
        <option>Multiple2</option>
        <option selected="selected">Multiple3</option>
      </select><br/>
      <input type="checkbox" name="check" value="check1"/> check1
      <input type="checkbox" name="check" value="check2"
    checked="checked"/> check2
      <input type="radio" name="radio" value="radio1"
    checked="checked"/> radio1
      <input type="radio" name="radio" value="radio2"/> radio2
    </form>
    jQuery 代码:
    $("#results").append( "<tt>" + $("form").serialize() + "</tt>" );


    作用:序列化表格内容为字符串。用于 Ajax 请求。

    工具

    jQuery.each(obj,callback)

    代码
    $.each( [0,1,2], function(i, n){
      alert( "Item #" + i + ": " + n );
    });//遍历数组
    $.each( { name: "John", lang: "JS" }, function(i, n){
      alert( "Name: " + i + ", Value: " + n );//遍历对象
    });


    作用:通用例遍方法,可用于例遍对象和数组。

    jQuery.makeArray(obj)
    HTML 代码:
    <div>First</div><div>Second</div><div>Third</div><div>Fourth</div>
    jQuery 代码:
    var arr = jQuery.makeArray(document.getElementsByTagName("div"));
    结果:
    Fourth
    Third
    Second
    First


    作用:将类数组对象转换为数组对象。使我们可以在数组和对象之间灵活的转换。

    jQuery.trim(str)

     
    作用
    :这个大家应该很熟悉,就是去掉字符串起始和结尾的空格。

     5. 编写单独文件和插件:

    例如如下代码:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    	<head>
    		<title></title>
            <style type="text/css">
            .abj{ 100px; background-color:Blue; height:20px;}
            div { padding:20px;}
            #tooltip{ position:absolute; 120px;height:22px; line-height:22px; border:1px solid #ccc; background:#f6f6f6; font-size:12px;}
    
            </style>
    
    
            <script type="text/javascript" src="Scripts/jquery-1.4.1-vsdoc.js"></script>
    <script type="text/javascript">
            //超链接提示:
            $(document).ready(function () {
                var x = 10;
                var y = 20;
                $("a.tooltip").mouseover(function (e) {
                    this.myTitle = this.title;
                    this.title = "";
                    var tooltip = "<div id='tooltip'>" + this.myTitle + "</div>";
                    $("body").append(tooltip);
                    $("#tooltip")
                    .css({
                        "top": (e.pageY + y) + "px",
                        "left": (e.pageX + x) + "px"
                    }).show("fast");
                }).mouseout(function () {
                    $("#tooltip").remove();
                    this.title = this.myTitle;
                })
                    }); 
    </script>
    	</head>
    	<body>
        <p><a href="#" class="tooltip" title="这是我的超链接提示1">提示</a></p> 
    <p><a hef="#" title="这是自带提示1">自带提示1</a></p>
    </body>
    </html>
     
    

     "超链接提示"的功能应该做成插件所有的页面可以共用。

    方式一:

    建立单独的js文件:

     this.dhltip = function () {
        var x = 10;
        var y = 20;
        $("a.tooltip").mouseover(function (e) {
            this.myTitle = this.title;
            this.title = "";
            var tooltip = "<div id='tooltip'>" + this.myTitle + "</div>";
            $("body").append(tooltip);
            $("#tooltip")
                    .css({
                        "top": (e.pageY + y) + "px",
                        "left": (e.pageX + x) + "px"
                    }).show("fast");
        }).mouseout(function () {
            $("#tooltip").remove();
            this.title = this.myTitle;
        })
    }
    
    jQuery(document).ready(function () { dhltip(); });
    
    这样就ok!

    方式二,也可以做成插件的形式jquery.dhltip.js:

    (function ($) {
        $.fn.dhltip = function () {
            var x = 10;
            var y = 20;
            $("a.tooltip").mouseover(function (e) {
                this.myTitle = this.title;
                this.title = "";
                var tooltip = "<div id='tooltip'>" + this.myTitle + "</div>";
                $("body").append(tooltip);
                $("#tooltip")
                    .css({
                        "top": (e.pageY + y) + "px",
                        "left": (e.pageX + x) + "px"
                    }).show("fast");
            }).mouseout(function () {
                $("#tooltip").remove();
                this.title = this.myTitle;
            })
        }
    })(jQuery);
    
    这样的话 还需要在页面这样调用:
     $().ready(function () { $("body").dhltip(); });

    总结:jQuery插件的结构

     第一种:扩展到$ 全局

    (function ($) {
        $.extend(
        {
    tip1: function(){alert("tip1");}
    }   //jQuery.extend(object)方法参数要求一个结构式对象!
     );
    })(jQuery);

    第二种:扩展到jquery对象

    (function ($) {
        $.fn.extend(
        {
            tip2: function () {
            return this.each(function(){
            $(this).css({border:"solid 1px #F00",height:"100px"});
            });
            }
        }//jQuery.extend(object)方法参数要求一个结构式对象!

     );
    })(jQuery);


    Html:

    
    
    <script type="text/javascript">
                $(function () {
                    $.tip1(); //第一种
                    $("#test1").tip2(); //第2种
                });
    </script>

    6.

    获取一组radio被选中项的值:$("input[type=radio][checked]").val()

    (帮助:jquery 的中括号的意思:匹配包含给定属性的元素。匹配多个属性不能写成:$("input[type=radio,checked]"))

    也不能:$("input:radio[name='paykind']").val() 取,这样取到的值只是 初始化的值 一定要加上checked属性。 

  • 相关阅读:
    《Web 开发基础》专题系列
    《.NET 编程结构》专题汇总(C#)
    .NET Core:使用BarTender
    .NET Core:过滤器
    .NET Core:中间件
    .NET Core:Api版本控制
    .NET Core:Token认证
    .NET Core:SignalR
    .NET Core:跨域
    .NET Core:Json和XML
  • 原文地址:https://www.cnblogs.com/dudu837/p/1855512.html
Copyright © 2011-2022 走看看