jquery笔记
1、导入jquery
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由JohnResig发布。
jQuery设计的宗旨是“writeLess,DoMore”,即倡导写更少的代码,做更多的事情。
黑马第十期
导入类库 <script src="../js/jquery-1.4.2.js"></script>
https:
https:
window.onload  这个表示加载完页面所有东西以后才执行。
window.load    这个只是表明事件方法,但并未执行,比如click表示点击事件,但他并未执行,必须用上onclick他才会执行。
window.onload 必须等到页面内包括图片的所有元素加载完毕后才能执行,$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
window.onload 不能同时编写多个,如果有多个window.onload方法,只会执行一个,$(document).ready()可以同时编写多个,并且都可以得到执行。
window.onload 没有简化写法,$(document).ready(function(){})可以简写成$(function(){})   $().ready(function(){}) 。
$().ready(L);
function L(){
    alert(222);
}
$().ready(function(){ 
    alert(333);
});
jquery 和 dom 的转换
<script type="text/javascript">
    window.onload = function(){
        //dom对象转换jquery
        var domObj = document.getElementById("username");
        var jqueryObj = $(domObj);
        //alert(jqueryObj);
        //jquery转换dom。jquery是数组
        var jquery1=$("#username");
        var dom1=jquery1.get(0);
        var dom2=jquery1[0];
        //alert(dom1+"-"+dom2);
    }
</script>
2、选择器
基本选择器  $("#1")
    <script type="text/javascript">
        
        $("#b1").click(function(){
            $("#1").css("background-color","#ffff00");
        });
        
        $("#b2").click(function(){
            $("div").css("background-color","ff00dd");
        });
        $("#b3").click(function(){
            $(".mini").css("background-color","aa00dd");
        });
        
        $("#b4").click(function(){
            $("*").css("background-color","aa2233");
        });
      
        $("#b5").click(function(){
            $("div,.class").css("background-color","aa4433");
        });
   </script>
属性选择器  $("div[title='va']")
    <script type="text/javascript">
        
        $("#b1").click(function(){
            $("div[title]").css("background-color","#aaaaff");
        });
        
        $("#b2").click(function(){
            $("div[title='va']").css("background-color","#ffaaff");
        });
        
        $("#b3").click(function(){
            $("div[title^=te]").css("background-color","red");  
            
            
            
        });
        
        $("#b4").click(function(){
            $("input[type=hidden],#b2,.mini,div[title^=te]").css("background-color","blue");
        });
  </script>
层次选择器  子选择器 $("#one>div")
      <script type="text/javascript">
        
        $("#b1").click(function(){
            $("body div").css("background-color","red");
        });
        
        $("#b2").click(function(){
            $("#one>div").css("background-color","blue");
            });
        
        $("#b3").click(function(){
            $("#one+div").css("background-color","black");
            });
        
        $("#b4").click(function(){
            $("#two").parent().children("div").css("background-color","#aaccaa");
        });
        
        $("#b5").click(function(){
                $("#one~div").css("background-color","grey");
                });
    </script>
过滤选择器  偶数 $("div:even")
    <script type="text/javascript">
        $("#b1").click(function(){
            $("div:first").css("background-color","red");
        });
        $("#b11").click(function(){
            $("div:last").css("background-color","grey");
        });
        $("#b2").click(function(){
            $("div:not(#o2)").css("background-color","yellow");
        });
        
        $("#b3").click(function(){
            $("div:even").css("background-color","grey");
            
        });
        $("#b4").click(function(){
            $("div:gt(3)").css("background-color","red");
            
            
        });
        $("#b5").click(function(){
            
            
            $("div:lt(5):gt(2)").css("background-color","red");
        });
    </script>
table行背景色
<script src="../js/jquery-1.4.2.js"></script>
<script type="text/javascript">
    $().ready(function(){
        $("#t1 tr:even").css("background","red");
        $("#t1 tr:odd").css("background","blue");
        $("#t2 tr:gt(0):even").css("background","red");
    //    $("#t2 tr:gt(0):odd").css("background","blue");
        $("#t2 tr:not(:first):odd").css("background","yellow");
        $("#t3 tr:not(:first):odd").each(function(){
            //alert(this);
            var jobj =$(this);
            jobj.children("td:first").css("background","red");
        });
//        $("#t3 tr:not(:first):even").each(function(){
//            //alert(this);
//            var jobj =$(this);
//            jobj.children("td:first").css("background","yellow");
//        });
        $.each($("#t3 tr:not(:first):even"),function(){
            //alert(this);
            var jobj =$(this);
            jobj.children("td:first").css("background","yellow");
        });
    });
</script>    
子选择器  $("div(.one) :nth-child(2)")  $("div(.one) div:nth-child(2)")    $("div(.one):nth-child(2)")
<script src="../js/jquery-1.4.2.js"></script>
    <style type="text/css">
        .one{margin:20px;
            background-color:#aabb00;
            width:200px;
            height:150px;}
        div{
            background-color:#aabbcc;
            width:50px;
            height:30px;}
    </style>
    <script type="text/javascript">
        $().ready(function(){
            $("#b1").click(function(){
                $("div(.one) :nth-child(2)").css("background","red");
            });
        $("#b3").click(function(){
                $("div(.one) div:last-child").css("background","yellow");
            });    
        });
    </script>
内容选择器    
    <input type="button" id="b1" value="改变含有con的div背景色">
     <input type="button" id="b2" value="改变没有文本的div背景色">
     <input type="button" id="b3" value="改变含有class为pl的div背景色">
     <input type="button" id="b4" value="改变含有子元素的div背景色">
  <script type="text/javascript">
      $("#b1").click(function(){
        $("div:contains('cont')").css("background","red");
    });
    $("#b2").click(function(){
        $("div:empty").css("background","blue");
    });
    $("#b3").click(function(){
        $("div:has(.pl)").css("background","yellow");
    });
    $("#b4").click(function(){
        $("div:parent").css("background","#11aaaa");
    });
  </script>
表单选择器
      <html>
      <head>
        <title>form_selector.html</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    <script src="../js/jquery-1.4.2.js"></script>
      </head>
      <body>
        <form>
            <input type="button" id="b1" value="改变可调属性的值"/><br/>
            <input type="button" id="b2" value="显示interet被选个数"/><br/>
            <input type="button" id="b3" value="显示interet被选option"/><br/>
            <input type="button" id="b4" value="显示隐藏域内容"/><br/>
            <hr/>
            job
            <select id="job">
                <option selected="selected">select</option>
                <option id="java">java</option>
                <option id="c">c</option>
                <option id="c++">c++</option>
                <option id="jquery">jquery</option>
            </select>
            <hr/>
            interet
            <select id="interet" multiple="multiple" size="3">
                <option id="java" selected="selected">java</option>
                <option id="c">c</option>
                <option id="c++">c++</option>
                <option id="jquery">jquery</option>
                <option id="jquery2">jquery2</option>
                <option id="jquery3">jquery3</option>
                <option id="jquery4">jquery4</option>
            </select>
            <input type="text" value="文本不可调" disabled="true">
            <input type="text" value="文本" disabled="true">
            <input type="text" value="文本可调">
            <hr/>
            checkbox
            <input type="checkbox" id="jobc" checked="checked">老师
            <input type="checkbox" id="jobc">学生
            <input type="checkbox" id="jobc">工人
            <input type="checkbox" id="jobc">程序员
            <hr/>
            radio
            <input type="radio" id="sex" name="sex" checked="checked">男
            <input type="radio" id="sex" name="sex">女
            <input type="hidden" value="hd1">
            <input type="hidden" value="hd2">
            <input type="hidden" value="hd33">
            <input type="hidden" value="hd4">
        </form>
        <script type="text/javascript">
            $("#b1").click(function(){
                //$("input:disabled").val("aaa");
                $("input:enabled").val("改111");
            });
            $("#b2").click(function(){
                //alert($("#interet>option").length);
                alert($("#interet>option:selected").length);
            });
            $("#b3").click(function(){
            //    alert($("input[type='checkbox']:checked").length);
                alert($("#interet>option:selected").text());
            });
            $("#b4").click(function(){
                $("input:hidden").each(function(){
                    var $obj=$(this);
                    alert($obj.val());
                });
            });
        </script>
      </body>
    </html>
3、ajax
function queryMethod(){
    $.ajax({
        url:"../../AA",
        data:{method:'query'},
        success:function(data){
            var jsonObj=eval("("+data+")");
        
            for(var i=0;i<jsonObj.length;i++){
                var name=jsonObj[i].name;
                var email = jsonObj[i].email;
                var phone = jsonObj[i].phone;
                var id = jsonObj[i].id;
            
                $tr = $("<tr/>");
                $inputId = $("<input/>").attr("type","hidden").attr("name","id").attr("value",id);
                $nameTD = $("<td/>").text(name);
                $emailTD = $("<td/>").text(email);
                $phoneTD = $("<td/>").text(phone);
                $delA = $("<a/>").text("删除").css("cursor","pointer").css("text-decoration","underline");
                $delA.click(function(){
                    if(window.confirm("确定删除吗?")){
                        deleteUser(this);
                    }
                });    
                $delTD = $("<td/>").append($delA);
                $updateA = $("<a/>").text("修改").css("text-decoration","underline");
                $updateTD = $("<td/>").append($updateA);
                $tr.append($nameTD).append($emailTD).append($phoneTD).append($updateTD).append($delTD).append($inputId);
                $("#user>tbody").append($tr);
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
             alert("error");
        }
    });
}    
    public void getPersonAll(){
        List<Person> persons=(ArrayList<Person>)this.getServletContext().getAttribute("persons");
        String str=JSONArray.fromObject(persons).toString();
        response.setContentType("text/html;charset=utf-8");
        try {
            response.getWriter().println(str);
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    }
ajax
        $("#addUser").click(function(){
                    var name=$("#name").val();
                    var email=$("#email").val();
                    var phone=$("#phone").val();
                    $.ajax({
                        url:"../../AA",
                        success:function(){
                            
                            var $updateA = $("<a/>").css("cursor","pointer").text("修改");
                            $updateA.click(function(){
                                updateUser(this);
                            });
                            var $delA = $("<a/>").css("cursor","pointer").css("text-decoration","underline").text("删除");
                                $delA.click(function(){
                                    if(window.confirm("确定删除吗?")){
                                        deleteUser(this);
                                    }
                                });            
                            var $nameTD = $("<td/>").text(name);
                            var $emailTD = $("<td/>").text(email);
                            var $phoneTD = $("<td/>").text(phone);
                            var $updateTD = $("<td/>").append($updateA);
                            var $delTD = $("<td/>").append($delA);
                            var $idHidden = $("<input/>").attr("type","hidden").attr("name","id").attr("value",count);
                            var $userTR = $("<tr/>")
                                .append($nameTD).append($emailTD).append($phoneTD)
                                .append($updateTD).append($delTD).append($idHidden);
                            $("table(#user)>tbody").append($userTR);
                            count++;
                        },
                        data:{
                            method:'add',
                            id:count,
                            name:name,
                            email:email,
                            phone:phone
                        },
                        error:function(){
                            alert("error");
                        }
                    });
4、function
function是一个对象
Function是最顶层对象
任何对象都有可能成为任何对象的属性
        function Person(){
        }
        Person.id=2;
        Person.name='ass';
        function Student(){
            alert("student");
        }
        Person.student=Student;
        Student();
        function A(){}
        function b(){}
        function c(){}
        function d(){alert("dd");}
        A.B=b;
        A.B.C=c;
        A.B.C.D=d;
        A.B.C.D();
prototype
        function Person(){
        }
        Person.prototype.id=11;
        Person.prototype.name="aa";
        var p=new Person();
        alert(p.id);
        alert("空-"+p.name);
        function Student(){}
        Student.prototype=Person.prototype;
        alert(Student.prototype.name);
json        
    var j={
        a:'aa',
        b:'bb',
        c:function(){alert("cc");}
    };
    j.d='dd';
    j['e']='ee';
    for(var i in j){
        if(typeof j[i] == 'string'){
            alert("string-"+j[i]);
        }else if(typeof j[i] == 'function'){
            j[i]();
        }
    }
extend
        function extend2(json,proto){
            function F(){}
            if(typeof json == "object"){
                for(var i in json){
                    F.prototype[i]=json[i];
                }
            }
            else if(typeof json == "function"){
                F.prototype = json.prototype;
                
                for(var i in proto){
                    F.prototype[i]=proto[i];
                }
            }
            return F;
        }
            var Person=extend2({
                id:'11',
                name:'scott'
            });
            var p=new Person();
            
            
        alert(p.name);
            var Student = extend2(Person,{
                age:'22',
                sex:'man'
            });
            var s=new Student();
            Person.prototype.name="ppp";
            s.name="ssss";
            alert(s.name);
            alert("p"+p.name);
            alert(Person.prototype.name);
delegate 给未来的元素添加事件            
        $().ready(function(){
            $("div").unbind("click");
            $("div").bind("click",function(){
                alert("afdsa");
            });
            $("body").delegate("div","click",function(){
                alert("1");
            });
            $("input[type='button']").bind("click",function(){
                $("body").append($("<div/>").text("aaaaaaa"));
            });
        });
自定义事件                    
        $().ready(function(){
            $("div").unbind("学好java");
            $("div").bind("学好java",function(event,a){
                alert(a);
            });
            $("div").unbind("click");
            $("div").bind("click",function(){
                $(this).trigger("学好java",5);
            });
        
        
        
        
        
        
        
        
        
        
            $("p").unbind("学jquery");
            $("p").bind("学jquery",function(event,obj){
                alert(obj.a);
                alert(obj.b);
            });
            $("p").unbind("click");
            $("p").bind("click",function(){
                $(this).trigger("学jquery",{
                    a:'aaa',
                    b:'bbb'
                });
            });
        });            
        
        function ajaxFunction(){
            var xmlHttp;
            try { 
                xmlHttp = new XMLHttpRequest();
            } 
            catch (e) {
                try {
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e) {
                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    } 
                    catch (e) {
                    }
                }
            }
            return xmlHttp;
        }
        var xmlHttp;
        function ajax(json){
            xmlHttp = ajaxFunction();
            xmlHttp.onreadystatechange = function(){
                
                if (xmlHttp.readyState == 4) {
                    if (xmlHttp.status == 200) {
                        
                        json.callback(xmlHttp.responseText);
                    }
                }
            };
            xmlHttp.open(json.method, json.url, true);
            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlHttp.send(json.data);
        }
        window.onload = function(){
            ajax({
                url:'../AjaxServlet',
                data:null,
                method:'post',
                callback:function(data){
                    alert(this);
                    alert(data);
                }
            });
        };
this
        function Person(){
            alert(this);  
        }
        function Student(){
            var d=3;
        }
        Student.per=Person;
        Student.per();
        Person(); 
        Person.call(Student);
        var json={
            a:Person
        };
        json.a();
(function(window){
    function Person(){
        return{
            getName:getName,
            setName:setName,
            getAge:getAge,
            setAge:setAge
        };
    }
    
    function getName(){
        return this.name;
    }
    function setName(name){
        this.name=name;
    }
    function getAge(){
        return this.age;
    }    
    function setAge(age){
        this.age=age;
    }
    
    function getSex(){
        return this.sex;
    }
    function getJob(){
        return this.job;
    }
    window.Person=Person;
})(window);
var p=new Person();
p.setName("aaa");
alert(p.getName());
var p2 = window.Person();
p2.setAge(22);
alert(p2.getAge());
jquery plugin
    jQuery.fn = jQuery.prototype = {
        init: function( selector, context ) {......
    window.jQuery = window.$ = jQuery;
    $ 是jQuery    fn 是prototype     ()() 闭包执行   (functio($){})($) 传入$执行函数
        (function($){
            $.fn.myextends=function(json){
                for(var i in json){
                    $.fn[i]=json[i];
                }
            }
        })($)
        $().ready(function(){
            $.fn.myextends({
                a:function(){
                    alert("aaaa");
                }
            })
            $("body").a();
        })
5、函数说明
        var F1=function(){}
        function F2(){
            alert(1);
        }
        var f3=new F2();
        alert(typeof(F1));
        alert(typeof(F2));
        alert(typeof(f3));
        F2();
匿名函数        
    
    (function(i){
        alert(i);
    })(11);
    
    var f=function(i){
        alert(i);
    };
    f(22);
    alert(typeof(f));
    
    function F(i){
        alert(i);
    }
    var f2=new F(33);
    alert(typeof(f2));
    F(55);
function F1(){
    alert("function declaration 1");
}
var f2=new function(){
    
};
function Fun3(){
    alert("function Fun3");
}
var f31=new Fun3();
f31;
var f32=Fun3;
alert("typeof(f32)--"+typeof(f32));
f32();
alert(f32);
var f4=function(){
    alert("function expression 4");
};
function F1(){
    alert("F1");
}
var f2=function(){
    alert("F2");
};
(function F3(){
    alert("F3");
})();
!function F31(){
    alert("!!");
}();
+function F32(){
    alert("++");
}();
-function F33(){
    alert("--");
}();
var f3=function(){
    alert("F4");
}();
函数调用的三种方式:
obj.myFunc();
myFunc.call(obj,arg);
myFunc.apply(obj,[arg1,arg2..]); 
call和apply可以用来重新定义函数的执行环境,也就是this的指向。通过一个操作DOM的例子来理解。
function changeStyle(attr, value){
    this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
call中的第一个参数用于指定将要调用此函数的对象,在这里,changeStyle函数将被box对象调用,this指向了box对象,如果不用call的话,程序报错,因为window对象中没有style属性。
apply的用法:
window.changeStyle.apply(box, ['height', '200px']);
call用来调用另一个对象的方法,但调用的对象是可以作为参数传入的。
function A(name){
    this.name=name;
    this.showName=function(){
        alert(this.name);
    }
}
function B(name,age){ 
    this.name=name;
    this.age=age;
}
var a=new A("aaa"); 
var b=new B('bbb',10);
a.showName.call(b);
call最经典的应用就是继承。javascript是没有对象继承概念的,我们只能用一些方法实现。
function A(name){
    this.name=name;
    this.showName=function(){
        alert(this.name);
    }
}
function B(name,age){ 
    
    A.call(this,name);
    this.age=age;
}
var b=new B('bbb',10);
b.showName();