爱玺玺

爱玺玺的生活日记本。wx:lb87626

理解jquery其中的对象

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<script type="text/javascript" src="/js/jquery-1.8.2.js"></script>

<title>Document</title>

<script type="text/javascript">

//匿名函数,页面加载时会运行一次,里面的函数会被加载到内存供后面使用?

(function(){

//局部的匿名函数带参数赋给jq,返回的是个对象。这里的sel参数传入的就是节点,可能是js的,也可能是#或者.这类的就query用的

var jq=function(sel){

return new jq.fn.init(sel);//这里的new 返回给对象 js函数就是类

}

//给对象jq添加成员方法fn

jq.fn={

init:function(sel){

//实现各种选择器:#id  tag  dom对象

                    //字符串.indexOf('#')  从字符串的左边查找第一次出现"#"号的下标位置,没有出现返回-1

                    if(sel.nodeType){//dom对象   $(dom对象)

                     this[0] = sel;

                     this.length = 1;

                    }else if(sel.indexOf('#')===0){ //#id

                        //sel = "#username";

                        var flag = sel.substr(1);  //去除#号

                        var elem = document.getElementById(flag);

                        //dom对象 是jquery对象的数组部分

                        this.length = 1; //dom对象数量

                        this[0] = elem;

                    }else{//tag标签

                        //sel = "input";

                        var elems = document.getElementsByTagName(sel);//集合列表对象

                        //集合列表对象 与 jquery对象做合并,dom对象变为jquery对象的数组部分

                        for(var i=0; i<elems.length; i++){

                         this[i] = elems[i];

                        }

                        this.length = elems.length;

                    }

                },

                css:function(k,v){

                    //this代表调用该方法的当前对象(jquery对象)

                    //jquery对象 需要变为dom对象才可以设置样式

                    //设置遍历机制,以便多个对象的处理

                    for(var i=0; i<this.length; i++){

                     this[i].style[k] = v;

                    }

                },

                attr:function(k,v){

                    //遍历并设置属性

                    for(var i=0; i<this.length; i++){

                     this[i].setAttribute(k,v);

                    }

                },

                each:function(callback){

                    //this代表调用该方法的当前对象(jquery对象)

                    //callback代表参数是函数参数

                    //遍历每个dom对象

                    for(var i=0; i<this.length; i++){

                        //this[i] //代表每个dom对象

                        //callback在此for循环被执行多次,每个函数内部的this关键字就代表dom对象

                        callback.call(this[i],i,this[i]); //函数.call/apply(函数内部this的指引,参数,参数...)

                    }

                }

            }

            //init继承了fn的所有成员变量和方法,根据上面的函数返回的是new jq.fn.init(sel),jq对象本身是init,现在Init继承了fn,jq更强大

            jq.fn.init.prototype = jq.fn;

window.$ = jq;//把jq赋给$现在$就表示对象jq

})();

function f1(){

var clr = ['green','blue','gole','orange','pink','yellow'];

$('li').each(function(m, n){

$(this).css('color',clr[Math.floor(Math.random()*7)]);

});

            //console.log($('#username'));//可以获取id="username"的所有信息

            $('#username').css('backgroundColor','pink');

            console.log($('li'));

            $('li').css('backgroundColor','blue');


            $('li').attr('country','three');

        }

    </script>

</head>

<body>

<input type="text" id="username" value="jack" /><br />

<input type="text" id="useremail" value="jack@163.com" /><br />

<input type="text" id="userqq" value="238823" /><br />

<ul>

<li>刘</li>

<li>关</li>

<li>张</li>

</ul>

<input type="button"  value="触发" onclick="f1()" />

</body>

</html>


红色部分就是贯穿始终,根据匿名函数参数创建的对象。jq就是这个this。这个this原型继承(prototype)fn。就能使用fn里面的所有。

发表评论:

Powered By Z-BlogPHP 1.4 Deeplue Build 150101

Copyright Your WebSite.Some Rights Reserved.

蜀ICP备11021721号-5