2019-06-14

创建对象的方法

1、单体

<script type="text/javascript">
var Tom = {
    name : 'tom',
    age : 18,
    showname : function(){
        alert('我的名字叫'+this.name);    
    },
    showage : function(){
        alert('我今年'+this.age+'岁');    
    }
}
</script>

2、工厂模式

<script type="text/javascript">

function Person(name,age,job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.showname = function(){
        alert('我的名字叫'+this.name);    
    };
    o.showage = function(){
        alert('我今年'+this.age+'岁');    
    };
    o.showjob = function(){
        alert('我的工作是'+this.job);    
    };
    return o;
}
var tom = Person('tom',18,'程序员');
tom.showname();

</script>

2、构造函数

<script type="text/javascript">
    function Person(name,age,job){            
        this.name = name;
        this.age = age;
        this.job = job;
        this.showname = function(){
            alert('我的名字叫'+this.name);    
        };
        this.showage = function(){
            alert('我今年'+this.age+'岁');    
        };
        this.showjob = function(){
            alert('我的工作是'+this.job);    
        };
    }
    var tom = new Person('tom',18,'程序员');
    var jack = new Person('jack',19,'销售');
    alert(tom.showjob==jack.showjob);
</script>

3、原型模式

<script type="text/javascript">
    function Person(name,age,job){        
        this.name = name;
        this.age = age;
        this.job = job;
    }
    Person.prototype.showname = function(){
        alert('我的名字叫'+this.name);    
    };
    Person.prototype.showage = function(){
        alert('我今年'+this.age+'岁');    
    };
    Person.prototype.showjob = function(){
        alert('我的工作是'+this.job);    
    };
    var tom = new Person('tom',18,'程序员');
    var jack = new Person('jack',19,'销售');
    alert(tom.showjob==jack.showjob);
</script>

copy和apply

call和apply的区别

    二者都可以改变当前的this,区别在于apply方法要将参数放入数组中再传参

例:

function aa(a,b){
            alert('我的this是' + this + ',我的a是' + a + ',我的b是' + b);
        }//我的this是[object Window],我的a是2,我的b是3
        // aa(2,3);

        //我的this是abc,我的a是2,我的b是3
        // aa.call('abc',2,3);

        //我的this是abc,我的a是2,我的b是3
        aa.apply('abc', [2,3]);

函数的继承

<script type="text/javascript">

        function fclass(name,age){
            this.name = name;
            this.age = age;
        }
        fclass.prototype.showname = function(){
            alert(this.name);
        }
        fclass.prototype.showage = function(){
            alert(this.age);
        }
        function sclass(name,age,job)
        {
            fclass.call(this,name,age);
            this.job = job;
        }
        sclass.prototype = new fclass();
        sclass.prototype.showjob = function(){
            alert(this.job);
        }
        var tom = new sclass('tom',19,'全栈工程师');
        tom.showname();
        tom.showage();
        tom.showjob();
    </script>

新增选择器

<script type="text/javascript">
        window.onload = function(){
            var oDiv = document.querySelector('#div1');
            alert(oDiv);//弹出[object HTMLDivElement],表示选择了该Div

            //如果要选择多个元素用querySelectorAll
            var aLi = document.querySelectorAll('.list li');
            alert(aLi.length);//8
        }
    </script>

jQuery的加载

<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        // alert($);//弹出function (a,b){return new n.fn.init(a,b)}表示JQuery已经引进来了,这是它的一个构造函数

        //JS写法
        window.onload = function(){
            var oDiv = document.getElementById('div');
            alert(oDiv.innerHTML);//这是一个div元素
        }

        //jQuery的完整写法
        //比上面JS写法先弹出,因为window.onload是把页面元素加载、渲染完才弹出,而ready()是把所有页面的节点加载完之后就弹出了,不用等渲染了
        /*$(document).ready(function(){
            var $div = $('#div');
            alert('jQuery:' + $div.html());//jQuery:这是一个div元素
        })*///$div.html相当于innerHTML

        //简写方式
        $(function(){
            var $div = $('#div');//CSS样式怎么写,这里就怎么写
            //html()方法相当于原生JS的innerHTML
            alert($div.html() + 'jQuery');
        })
    </script>

jQuery选择器

jquery选择器可以快速地选择元素,选择规则和css样式相同,使用length属性判断是否选择成功。
  • $(document) //选择整个文档对象
  • $('li') //选择所有的li元素
  • $('#myId') //选择id为myId的网页元素
  • $('.myClass') // 选择class为myClass的元素
  • $('input[name=first]') // 选择name属性等于first的input元素
  • $('#ul1 li span') //选择id为为ul1元素下的所有li下的span元素

对选择集进行修饰过滤(类似CSS伪类)

  • $('#ul1 li:first') //选择id为ul1元素下的第一个li
  • $('#ul1 li:odd') //选择id为ul1元素下的li的奇数行
  • $('#ul1 li:eq(2)') //选择id为ul1元素下的第3个li
  • $('#ul1 li:gt(2)') // 选择id为ul1元素下的前三个之后的li
  • $('#myForm :input') // 选择表单中的input元素
  • $('div:visible') //选择可见的div元素

对选择集进行函数过滤

  • $('div').has('p'); // 选择包含p元素的div元素
  • $('div').not('.myClass'); //选择class不等于myClass的div元素
  • $('div').filter('.myClass'); //选择class等于myClass的div元素
  • $('div').first(); //选择第1个div元素
  • $('div').eq(5); //选择第6个div元素

选择集转移

  • $('div').prev('p'); //选择div元素前面的第一个p元素
  • $('div').prevAll('p'); //选择div元素前面所有的p元素
  • $('div').next('p'); //选择div元素后面的第一个p元素
  • $('div').nextAll('p'); //选择div元素后面所有的p元素
  • $('div').closest('form'); //选择离div最近的那个form父元素
  • $('div').parent(); //选择div的父元素
  • $('div').children(); //选择div的所有子元素
  • $('div').siblings(); //选择div的同级元素
  • $('div').find('.myClass'); //选择div内的class等于myClass的元素

选择集转移

例:

;<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选择集转移</title>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            //prev()是同级的上一个元素,prevAll()是同级的上面所有的元素
            //next()是同级的下一个元素,nextAll()是同级的下面所有的元素

            //修改#div1的下一个元素的样式
            $('#div1').next().css({color: 'red'});

            //修改#div1的下面所有p标签设置样式
            $('#div1').nextAll('p').css({color: 'red'});

            //选择上一级的父元素
            /*$('#span01').parent().css({
                width:'100px',
                height:'100px',
                background:'gold'
            })*/

            //获取祖级用$('#span02').parent().parent()不可取,可用closest('div')获取离span02最近的div
            //closest可以选择离自己最近的元素,元素可以是父级,也可以是子集
            $('#span01').closest('div').css({
                width:'200px',
                height:'200px',
                background:'pink'
            })

            /*
            $('.list li')与$('.list').children()的区别:
                原始的选择集不一样
                $('.list li')不能通过end()回到父级
                $('.list').children()可以通过end()回到父级
            */
            $('.list').children().css({
                background:'gold',
                height:'30px',
                marginBottom:'10px'
            }).end().css({
                background:'green'
            })

            //eq(2)是选择索引等于2的第三个li,siblings()表示除第三个之外的其它兄弟li
            $('.list2 li:eq(2)').css({background:'gold'}).siblings().css({background:'green'});

            //find()是选择div内的class等于link1的元素
            $('#div2').find('.link1').css({color:'red'});
        })
    </script>
</head>
<body>
    <div id="div1">这是一个div元素</div>
    <div>这是第二个div元素</div>
    <p>这是一个p元素</p>

    <div>
        <p>
            <a href="#">腾讯网</a>
            <span id="span01">span元素</span>
        </p>
    </div>

    <ul class="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>

    <ul class="list2">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>

    <div id="div2">
        <p>
            <a href="#" class="link1">腾讯网</a>
        </p>
    </div>
</body>
</html>

jQuery样式操作

jquery用法思想二 :

同一个函数完成取值和赋值

操作行间样式:

// 获取div的样式
$("div").css("width");
$("div").css("color");


//设置div的样式
$("div").css("width","30px");
$("div").css("height","30px");
$("div").css({fontSize:"30px",color:"red"});

特别注意

 选择器获取的多个元素,获取信息获取的是第一个,比如:$("div").css("width"),获取的是第一个div的width。

操作样式类名

$("#div1").addClass("divClass2") //为id为div1的对象追加样式divClass2
$("#div1").removeClass("divClass")  //移除id为div1的对象的class名为divClass的样式
$("#div1").removeClass("divClass divClass2") //移除多个样式
$("#div1").toggleClass("anotherClass") //重复切换anotherClass样式

jQuery做选项卡

例·:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery做选项卡</title>
    <style type="text/css">
        .btns{
            width: 500px;
            height: 50px;
        }
        /*选项卡的样式*/
        .btns input{
            width: 100px;
            height: 50px;
            background-color: #ddd;/*默认灰色*/
            color: #666;
            border: 0px;
        }
        /*被选中的选项卡的样式*/
        .btns input.cur{
            background-color: gold;
        }
        /*内容区的样式*/
        .contents div{
            width: 500px;
            height: 300px;
            background-color: gold;
            display: none;/*默认隐藏*/
            line-height: 300px;
            text-align: center;
        }
        /*被选中的内容区的样式*/
        .contents div.active{
            display: block;
        }
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $('#box1 #btns input').click(function() {
                //失去焦点,避免出现默认的蓝框
                $(this).blur();
                //this是原生的对象
                // alert(this);//弹出[object HTMLInputElement],说明this就是当前点击的input元素

                //jQuery的this对象使用时要用$()包起来,这样就可以调用jQuery的方法了
                //给当前元素添加选中样式,为兄弟元素移除选中样式
                $(this).addClass('cur').siblings().removeClass('cur');

                //$(this).index()获取当前按钮所在层级范围的索引值
                //显示对应索引的内容区,隐藏其它兄弟内容区
                $('#box2 #contents div').eq($(this).index()).addClass('active').siblings().removeClass('active');
            });
            
            // $('#box2 #btns input').click(function() {
            //  $(this).blur();
            //  $(this).addClass('cur').siblings().removeClass('cur');
            //  $('#box2 #contents div').eq($(this).index()).addClass('active').siblings().removeClass('active');
            // });
        })
    </script>
</head>
<body>
    <div id="box1">
        <div class="btns" id="btns">
            <input type="button" value="tab01" class="cur">
            <input type="button" value="tab02">
            <input type="button" value="tab03">
        </div>
    </div>
    <br><br>
    <div id="box2">
        <div class="contents" id="contents">
            <div class="active">tab文字内容一</div>
            <div>tab文字内容二</div>
            <div>tab文字内容三</div>
        </div>
    </div>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 单体创建对象 单体创建对象 var Tom{ name :‘Tom’, age :‘18’, showname。f...
    陈_066c阅读 185评论 0 0
  • 面向过程与面向对象编程 1、面向过程:所有的工作都是现写现用。 2、面向对象:是一种编程思想,许多功能事先已经编写...
    々_18C阅读 370评论 0 0
  • 创建对象的方法 1、单体 2、工厂模式 2、构造函数 3、原型模式 copy和apply call和apply的区...
    按时发疯阅读 225评论 0 0
  • jquery介绍 jQuery是目前使用最广泛的javascript函数库。据统计,全世界排名前100万的网站,有...
    冰鈊夢阅读 163评论 0 0
  • jquery介绍 : jQuery是目前使用最广泛的javascript函数库,jquery是一个函数库,一个js...
    dream_seeker阅读 191评论 0 0