jQuery权威指南_读书笔记

$(document).ready(function(){
    //document对象ready后执行函数
})

$(function(){
    //简化写法
});


$(function() {
    var s;  //示例变量
   
    /*Ch1 Begin*/
   
    //添加click事件
    $(".divclass1").click(function() { //用class查找对象
        $(this).addClass("divclass2").next(".nextdivclass").css("display", "block"); //为元素添加divclass2样式,next返回紧邻的同辈元素,css对同辈元素作用
    });

    //提交表单取值
    $("#buttonid").click(function() { //用id查找对象
        var oTxtValue = $("#Text1").val(); //获取文本框的值
        var oRdoValue = $("#Radio1").is(":checked") ? "男": "女"; //获取单选框按钮值
        var oChkValue = $("#Checkbox1").is(":checked") ? "已婚": "未婚"; //获取复选框按钮值
        $("#divTip").css("display", "block").html(oTxtValue + "<br>" + oRdoValue + "<br>" + oChkValue); //显示提示文本元素
    })
   
    //切换样式
    $(".divclass1").click(function(){
        $(this).toggleClass("divclass2").html("点击后的样式"); 
    });

    /*Ch1 End*/
    /*Ch2 Begin*/
   
    //nth-child(number) 直接匹配第number个元素,下标从1开始
    //nth-child(odd) 与 :nth-child(even) 分别匹配序号为奇数与偶数的元素。奇数(odd)与(2n+1)结果一样;偶数(even)与(2n+0)及(2n)结果一样
    $("#tableid tr:nth-child(even)").addClass("trclass");
  
    //逗号合并选择器,同时选择id和span元素
    $("#divid,span").css("display","block"); 
    
    $("div>span").css("display","block");   //>号匹配子元素
    $("div span").css("display","block");   //匹配div下的span元素,不管在几层
   
    $(".classOut .classIn").css("display","block");  //在classOut样式下的,classIn样式的元素
    $(".myClass :hidden").css("display","block");  //选择器中含有空格符,在myClass样式元素的隐藏元素
    $(".myClass:hidden").css("display","block");  //选择器中没有空格符,在myClass样式元素的隐藏元素
   
    //divid下一个div/元素,同辈
    $("#divid + div").css("display","block");
    $("#divid").next().css("display","block");
   
    //匹配所有后面元素
    $("#divid ~ div").css("display","block");  //后面同辈的所有div
    $("#divid").nextAll().css("display","block");  //后面同辈的所有元素
   
    $("li:first").addClass("GetFocus");  //第一个li添加样式
    $("li:last").addClass("GetFocus");  //最后一个li添加样式
    $("li:not(.NotClass)").addClass("GetFocus");  //给非NotClass样式的li添加样式
    $("li:even").addClass("GetFocus");  //索引值为偶数的li,从0开始计
    $("li:odd").addClass("GetFocus");  //索引值为奇数的li,从0开始计
    $("li:eq(1)").addClass("GetFocus");  //索引为1的li,从0开始计
    $("li:gt(1)").addClass("GetFocus");  //索引值大于1的li,从0开始计
    $("li:lt(4)").addClass("GetFocus");  //索引值小于4的li,从0开始计
    $(":header").addClass("GetFocus");  //页面所有标题元素(h1 - h6)
   
    //toggleClass、toggle
    $("#divMove").slideToggle("slow");  //慢速显示切换(一般用于click事件),可以添加callback函数  

    $("div:contains('A')").css("display","block");  //包括文本'A'的div,文本可以是多个字符
    $("div:empty").css("display","block");  //不包含子元素和文本的空div
    $("div:has(span)").css("display","block");  //含有选择器所匹配的元素的元素(含有span的div)
    $("div:parent").css("display","block");  //含有子元素或者文本的父元素(包括子元素或文本的div)
   
    //show()适用于通过 jQuery 隐藏的元素,或在 CSS 中声明 display:none 的元素,但不适用于 visibility:hidden 的元素
    $("span:hidden").show();  //不占位的隐藏的span元素
    $("div:visible").addClass("GetFocus");  //可见的div元素
   
    /*Ch2 End*/
    /*Ch3 Begin*/
   
    var strAlt = $("img").attr("src"); //取得img的src属性值
    strAlt += $("img").attr("title"); //取得img的title属性值
    //当html()参数为空时返回元素的innerHTML,在做值判断时应该去掉空格,防止出错,如if($("#user").html().trim()=="jack")...;
    //html()取值包括html元素标签,如<p><b><li>等,text()取值只包括文本
    $("#divAlt").html(strAlt);  //显示信息
    //获取属性:当页面存在两个img元素时, $("img").length为2,但$("img).attr("src")值为第一个img的src
   
    $("img").attr("src", "Images/img01.jpg");//设置src属性
    $("img").attr("title", "这是一幅风景画");//设置title属性
    $("img").attr({ src: "Images/img02.jpg", title: "这是一幅风景画2" });//重新加载,同时设置二个属性
    $("img").addClass("clsImg");//增加样式
    $("span").html("加载完毕");//将原来span中"正在加载"字样显示为"加载完毕"
    //设置属性:所有的img元素都添加属性
   
    //change事件第一次无效,求解救T_T
    $("select").change(function() { //设置下拉列表框change事件
        var strSel = $("select").val().join(","); //获取下拉列表框所选中全部选项值,<select multiple="multiple"...>
    })
    $("input").change(function() { //设置文本框change事件
        var strTxt = $("input").val(); //获取文本框的值
    })
    $("input").focus(function() { //设置文本框focus事件
        $("input").val(""); //清空文本框的值
    })

    //$(this)指被点击的p元素
    $("p").click(function() {
        $(this).css("font-weight", "bold");//字体加粗
        $(this).css("font-style", "italic");//斜体
        $(this).css("background-color", "#eee");//增加背景色
        $(this).addClass("class1 class2"); //同时新增二个样式类别
        $(this).toggleClass("classSpan"); //切换样式类别
    })
   
    var div = $("<div>newDiv</div>"); //创建DOM对象
    $("#divId").show().append(div);//插入节点中
   
    $("div").append(retHtml); //在div里面,原内容之后插入内容,参数为方法名
    //jquery的function写在$(function(){...})里面
    function retHtml() {
        var str = " <b>Write Less Do More</b> ";
        return str;
    }
    $("span").after(retHtml); //在span外,后接内容,参数为方法名
    function retHtml() {
        var str = "<span><b>Write Less Do More</b><span>";
        return str;
    }
    $("img").appendTo($("span")); //把所有img插入到span里面原内容之后
   
    $("img").click(function() {
        //clone参数:是否复制元素的所有事件处理,默认空,false
        $(this).clone(true).appendTo("span");  //img点击对自身复制(含事件),并追加到span内容后面
    })
    //去掉true之后,为什么新的img不能复制了么?$("img")不是一样可以取到新复制出来的img么?
    //是的,是可以取到,但$(function(){ ... })事件只执行一次(想想onload事件)
   
    $("#spName").replaceWith("<span title='replaceWith'>张三</span>");  //用指定的 HTML 内容或元素替换被选元素
    $("<span title='replaceAll'>zs@163.com</span>").replaceAll("#spEmail");  //与replaceWith作用相同
   
    //wrap:把每个被选元素放置在指定的 HTML 内容或元素中,如<div></div>或document.createElement("div")或$(".div1")
    $("p").wrap("<b></b>");  //所有段落标记字体加粗(p外层加b)
    $("span").wrapInner("<i></i>");  //所有段落中的span标记斜体(在p里面,p内容之后加上i)
   
    $("img").each(function(index) {
        //index从0开始。return false; 可用于及早停止循环
        this.title = "第" + index + "幅风景图片,alt内容是" + this.alt;
    })
   
    $("ul li:first").css("font-weight", "bold");  //设置第一个li
    $("#btnClick").click(function() {
        $("ul li").remove("li[title=t]");  //删除title等于t的li,删除之后原eq序号改变
        $("ul li:eq(1)").remove();//删除新dom中的ul节点中第2个元素
    })   
   
    /*Ch3 End*/
    /*Ch4 Begin*/
   
    //body 含 div 含 btnShow,如果不加event.stopPropagation(),点击body会执行一次,div两次,btnShow三次
    var intI = 0; //记录执行次数
    $("body,div,#btnShow").click(function(event) {  //点击事件
        intI++; //次数累加
        $("#spShow").show()
        .html("<div>执行次数 <b>" + intI + "</b> </div>"); //追加文本
        event.stopPropagation();  //阻止冒泡过程
    })
   
    //同时绑定两个事件函数
    $("#btnBind").bind("click mouseout", function() {
        $(this).attr("disabled", "disabled"); //按钮不可用
    })
   
    $(".txt").bind({
        focus: function() { $("#divTip").show().html("执行的是focus事件"); },
        change: function() { $("#divTip").show().html("执行的是change事件");}
    })

    //$(selector).bind(event,data,function),其中data是可选参数
    var message = "执行的是focus事件";
    $(".txt").bind("focus", { msg: message }, function(event) {
        $("#divTip").show().html(event.data.msg); //设置文本
    });
   
    //悬浮显示提示信息,未加入延迟处理,效果参考 http://www.zhangxinxu.com/wordpress/?p=906
    $("#title").hover(
        function() { $("#tip").show(); },
        function() { $("#tip").hide(); }
    )
   
    //切换函数
    $("img").toggle(function() {
        $("img").attr("src", "Images/img01.jpg");
    }, function() {
        $("img").attr("src", "Images/img02.jpg");
    }, function() {
        $("img").attr("src", "Images/img03.jpg");
    })
    //用于传入判断条件,toggle(true)显示,toggle(false)为隐藏
    $("img").toggle(true); 
 
    //this表示调用此函数的input对象
   function btn_Click() { this.value = "xxx" }
    //事件,函数名,从元素的指定事件取消绑定的函数名,两者都是可选参数
    $("input").bind("click", btn_Click);  //绑定自定义事件
    $("input").unbind("click",btn_Click);
   
    var oTxt = $("input"); //获取文本框
    oTxt.bind("btn_Click", function() { /*编写文本框自定义事件*/  })
    oTxt.trigger("btn_Click"); //自动触发自定义事件
    oTxt.trigger("select"); //自动触发标准函数,选中文本框
    //oTxt.trigger("focus");//默认时文本框获取焦点
   
    //验证输入信息
    $("#txtEmail").focus(function() { /*本框获取焦点事件*/})
    $("#blur").focus(function() { /*文本框丢失焦点事件*/})   
   
    /*Ch4 End*/
    /*Ch5 Begin*/
   
    //slideUp/slideDown 如果元素已经隐藏/显示,则该效果不产生任何变化,除非规定了 callback 函数,可传入时间和callback函数
    $("img").slideUp();  //以滑动方式隐藏被选元素(关上)
    $("img").fadeOut();  //使用淡出效果来隐藏被选元素
    //slideDown、fadeIn适用于通过 jQuery 隐藏的元素,或在 CSS 中声明 display:none 的元素,但不适用于 visibility:hidden 的元素,这点与show相同
    $("img").slideDown(3000);  //以滑动方式显示被选元素(放下)
    $("img").fadeIn();  //使用淡入效果来显示被选元素
    $("img").fadeTo(3000, 0.5);  //淡化,透明度为50%
   
    //$(selector).animate(styles(必填),speed,easing,callback),宽与高变化的动画效果
    //CSS 样式使用 DOM 名称(比如 "fontSize")来设置,而非 CSS 名称(比如 "font-size")
    $(this).animate({  
        width: "20%", height: "70px" },
        3000, function() { //动画完成后执行的回调函数
            $(this).css({ "border": "solid 3px #666" })
            .html("xxx");
    })
 
    $("img").animate({ left: "-=52px" }, 3000);  //在3000毫秒内,以动画的形式向左移动52个像素
    $("img").animate({ left: "+=52px" }, 3000);  //在3000毫秒内,以动画的形式向右移动52个像素
   
    $("img").stop(); //停止正在执行的动画
    $("img").delay(2000).slideToggle(3000);  //延时切换图片,delay后接的动画动作
   
    /*Ch5 End*/
    /*Ch6 Begin*/
   
    //ajax实现参考:http://www.cnblogs.com/vipcjob/archive/2009/12/16/1625766.html
    $("#divResult").load("Default.aspx", { "myParam": "myValue"},function (data, status){ alert(data); } );
    //请求Default.aspx页,参数为myParam,值为myValue,得到服务器响应后再执行alert,显示请求页的HTML输出
    //Default.aspx改成Default.aspx #divId,则只加载Default.aspx页中id为divId的内容,可用逗号分隔id,加载多个div
    //返回的status值为success或error,用于判断请求是否成功
    //参数传递参数值:{ "myParam": encodeURI($("#tbUserName").val()) }
    //如果存在多个参数,可以用逗号连接,如:{ "myParam": "myValue" ,"otherParam" : "otherValue" };
    //也可以用整个表单序列化:$("#frmUserInfo").serialize()来传递数据
    //也可以直接写在url后面,如.load("Default.aspx?myParam=myValue",null,function...
   
    //UserInfo.json内容:[{"name": "张三","sex": "男","email": "mailto:aa@163.com%22%7D,%7B%22name": "李四","sex": "女","email": "bb@163.com"}]
    $.getJSON("UserInfo.json", function(jsonData) {
        $.each(jsonData, function(InfoIndex, Info) {
            var strHTML = "姓名:" + Info["name"] + ",性别:" + Info["sex"] + ",邮箱:" + Info["email"];
        })
    })
    //加载js处理文件,可以在js文件中加入当前dom的操作
    $.getScript("UserInfo.js");
   
    /*Ch6 End*/
    /*Ch7 Begin*/
   
    //jQuery.extend 函数详解,http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html
    //函数原型: extend(dest,src1,src2,src3...); 它的含义是将src1,src2,src3...合并到dest中,返回值为合并后的dest,src是json数据项
    //用空集{}作为dest参数,将结果返回给result,result={name:"Jerry",age:21,sex:"Boy"},后面同一参数(name)会覆盖前面的参数值
    var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"});
    //省略dest参数时,将该src合并到调用extend方法的对象中去
    $.extend({
        hello:function(){alert('hello');}  //将src合并到jquery的全局对象中去,调用 $.hello();
    });
    $.fn.extend({ 
        hello:function(){alert('hello');}   //将src合并到jquery的实例对象中去
    });
    //实例:
    $.extend({
        net:{}  //相当于建立命名空间
    });
    $.extend(
        $.net,{ hello:function(){alert('hello');}  }  //将hello方法扩展到之前扩展的net命名空间中去
    );
    //extend(boolean,dest,src1,src2,src3...)  //第一个参数boolean代表是否进行深度拷贝
    var result=$.extend( true, {}, { name: "John", location: {city: "Boston",county:"USA"} }, { last: "Resig", location: {state: "MA",county:"China"} } );
    //结果:result={name:"John",last:"Resig", location:{city:"Boston",state:"MA",county:"China"}}
    //false时:result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}  //false不对嵌套子对象操作
   
    $("div").data("dataKey", "dataValue");  //向被选元素附加数据,不能直接用$.data(...)
    $("div").data("dataKey");  //从被选元素获取数据
    //dataValue可以是json,如{a:"avalue"},取值data("datakey").a;也可以是一个自定义函数,如myfun,data("dataKey")("param")
   
    $("p").data("tmpData");  //初始化
    if($("p").data("tmpData")==null){}
   
    /*Ch7 End*/
    //第7、8章全都是jquery插件,略了
    /*Ch9 Begin*/
  
    //使用browser对象获取浏览器信息
    if ($.browser.msie){}  //如果是ie
    if ($.browser.mozilla){}  //如果是火狐
    var v = $.browser.version;  //版本号
   
    //使用$.each()工具函数遍历数组
    var ary = { "张三:": "60", "李四:": "70"};
    $.each(ary, function(Name, Value) {
        s += "<li>" + Name + "," + Value + "</li>";  //减少对DOM元素直接操作
    })
    $("#showUl").append(s);  //一次性完成DOM元素的增加
   
    //使用$.grep()工具函数筛选数组中的元素
    var arrNum = [2, 8, 3, 7, 4, 9, 3, 10, 9, 7, 21];  //筛选前: arrNum.join();
    var arrGet = $.grep(arrNum, function(ele, index) {  //筛选后:arrGet.join();
        return ele > 5 && index < 8 //元素值大于5且序号小于8
    })
    //使用$.map()工具函数变更数组中的元素
    var arrGet2 = $.map(arrNum, function(ele, index) {
        if (ele > 5 && index < 8) { //元素值大于5且序号小于8
            return ele + 1; //元素增加1
        }
    })
   
    //使用$.inArray()工具函数搜索数组中指定元素的位置
    var arrNum = [4, 21, 2, 12, 5];
    var arrPos = $.inArray(12, arrNum);  //结果为3,下标从0开始
   
    //isEmptyObject检测对象是否为空
    var obj = {};
    if($.isEmptyObject(obj)){}
   
    //使用$.contains()函数检测两个节点是否包含
    var node0 = document.documentElement;
    var node1 = document.body;
    if($.contains(node0, node1)){};  //对象node0包含对象node1,返回true

    //使用$.param()进行数组元素序列化
    var arrInfo = { id: 101, name: "tao", sex: 0 }; //基本信息数组
    var arrScore = { Score: { chinese: 90, maths: 100, english: 98 }, SunNum: { Score: 288, Num: 3 } };  //分数和汇总信息数组
    //序列化各数组
    var arrNewInfo = $.param(arrInfo);  //arrInfo数组序列化后,id=101&name=tao&sex=0
    var arrNewScore = $.param(arrScore);  //arrScore数组序列化后
    var arrDecScore = decodeURIComponent($.param(arrScore));  //arrScore序列化解码后
   
    //事件中的target方法优化冒泡现象
    $("#frame").bind("click", function(e) {
        $objChild = $(e.target);  //点击frame中的元素时,可以捕捉到触发事件的元素是哪一个
    })

    /*Ch9 End*/
});

posted @ 2012-01-11 10:19  DaCHun  阅读(561)  评论(0编辑  收藏  举报