zoukankan      html  css  js  c++  java
  • python2.0_s12_day13_javascript&Dom&jQuery

    今天主要内容:
    JavaScript
    Dom
    jQuery

    http://www.cnblogs.com/wupeiqi/articles/5369773.html

    今天主要内容大致了解:
    javascript
    1.首先要知道 JavaScript 和 Java 没有半毛钱关系.
    2.JavaScript 和python语言 一样 它也是一门语言.对于python语言需要用python解释器解释.而javascript的解释器是浏览器.
    3.javascript 能实现什么.javascript就是让我们的前端页面(html)动起来.怎样让它动?
    假如现在有一个页面,页面上有一个标签,用浏览器展示出来,现在我们用javascript把它删掉或者在这个标签上下在加一个标签,是不是就动了!!那么是不是给我们的感觉就有一个动画的效果了.
    对javascript 就是进行删除标签,修改标签,或者修改css的.
    Dom
    其实我们经常听到的前端所说的JS,其实就是指javascript+dom.
    javascript实现了对html文件中的html标签或者css进行修改的,而dom就提供了查找指定标签或者css的方法.
    我们既然说dom提供了查找 xxx的方法,那么我们可定会想到dom就是一个类,类实例化成为一个对象后就有相应的方法了.
    对没错,dom其实就是一个类.在html中用docment代表dom实例化后的对象.除了提供一些查找的方法,还提供一些alert(),confirm(),consol.log()等等方法.

    jQuery
    jQuery是什么?其实jQuery严格意义上来说它什么都不是,不算是一种具有独特功能的技术模块.
    我们通过javascript+dom两个东西,我们就可以在页面上做任何操作了.但是对于复杂的操作的话.我们需要很多步骤调用很多方法,可能100行代码才能实现.
    而jquery它帮你把所有的功能都封装到一个包里面了.我们只需要引用这个包,调用它的方法,复杂的逻辑,复杂的运算它帮我们做,我们只需要知道一个函数名.
    对于你来说,使用它能让你少做很多步操作就能实现很复杂的功能.
    jQuery的产生就是为了简化程序员代码量.它相当于封装了javascript和dom的类库.
    你后就不用写javascript和dom了,直接使用jque 就可以完成非常复杂的操作了.

    我们既然说jQuery封装了javascript和dom,并且以后前端也用jQuery就行了,不用写原生的javascript和dom了,那么为什么不跳过javascript和dom呢,直接学jQuery呢.
    因为,他们是基础,不知道原理,你用jQuery会很不顺手的.

    下面我们依次学习:
    JavaScript
    JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编辑相应代码之后,浏览器可以解释并做出相应的处理.
    1. JavaScript代码存在形式
    <!-- 方式一 -->
        <script type="text/javascript" src="JS文件"></script>

    <!-- 方式二 -->
        <script type="text/javascript">
            Js代码内容
        </script>

    2. JavaScript代码存在位置
    HTML的head中
    HTML的body代码块底部(推荐)

    由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放到body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已.
        <!--下面这个js文件在远端服务器,假设远端服务器挂了,浏览器再解释这段代码的时候会一直找下去,从而导致页面一直是大白页,直至等待超时报错-->
        <!--当代码放到底部时,即使js耗时严重,之前的html代码也都执行完了.-->
        <!--引入js文件的方式-->
        <script src="https://www.gstatic.com/og/_/js/k=og.og2.en_US.iF4jnkQuaf0.O/rt=j/t=zcms/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTv5-POC4Ks9GtGRdY2ywUWisqz7-Q"></script>
    
        <!--js代码块写到script标签中-->
        <script>
            alert('123');
        </script>

    3. 变量
    全局变量
    局部变量
    JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个var开头,如果未使用var,则默认声明的是全局变量.
        var name = 'ted' #局部变量
        age = 18
    注: 注释// 或/* */

    4. 基本数据类型
    数字(Number)
        var page = 111;
        var age = Number(18);
        var a1 = 1,a2 =2, a3 =3;
        parseInt("1.2");   #转换成数字类型
        parseFloat("1.2"); # 转换成数字类型,只是在显示的时候带小数点
    
        var age = '18.2'
        console.log(parseInt(age),typeof parseInt(age) )
        结果 18 "number"
        var age2 = '193.3'
        console.log(parseFloat(age2),typeof parseFloat(age2))
        结果:193.3 "number"

    注: JavaScript中是没有float浮点数的,数据类型都是number,只是在显示的时候不一样

    字符串(String)
        var name = 'ted';
        var name = String('ted');
        var age_str = String(18);
        常用的方法:
            obj.trim() #去除两边的空格
            obj.charAt(index) #索引取值
            obj.substring(start,end)    #获取字符串的子序列,类似于切片,开始的位置,结束的位置. 顾头不顾尾
            obj.indexOf(char)   # 获取某一个字符的索引位置
            obj.length  # 显示字符串的长度

    布尔(Boolean)
        var status = true;
        var status = false;
        var status = Boolen(1==1)
    数组(Array)
    数组是我们以后写代码中最长用到的.数组就等价于python的列表.在python里面用list创建列表,而在js里list = Array
    创建数组的两种方法
    var names = ['alex', 'tony', 'eric']
    var names = Array('alex', 'tony', 'eric')
    
    常用方法:
        添加
            obj.push(ele)                   追加
            obj.unshift(ele)                最前插入
            obj.splice(index,0,'content')   指定索引插入,中间这个0一定要有
        移除
            obj.pop()                       移除尾部,并获取
            obj.shift()                     移除头部,并获取
            obj.splice(index,count)         数组指定位置后count个字符并获取,是几个字符,不是索引,
                ["xx", "oo", "oo", 11, 22, 33, "aa"]
                li.splice('1',2)  这里的2是个数,前面的1是索引位置
                ["oo", "oo"]
                li
                ["xx", 11, 22, 33, "aa"]
        切片
            obj.slice(start,end)
        合并
            newArray = obj1.concat(obj2)
        翻转
            obj.reverse()
    
        字符串化
            obj.join('_')  将数组里的元素,使用'_"进行连接
        长度
            obj.length      显示长度
    字典
    对于javascript内部是没有字典类型的他是通过一个类来实现的.这句话怎么理解呢,意思是,如果你执行了下面的语句,它其实生成了一个对象,这个对象内部其实就像字典.反应到代码就是如下:
    var items = {'k1': 123, 'k2': 'tony'}
    items
    Object {k1: 123, k2: "tony"}
    我们看到,输入items显示上面一个东西.
    对于基本的数据类型,就这么多,以后的操作就是对这些数据类型进行操作.并且还有些用不到.

    接下来补充一点,并且是以后用的最多的.
    在 python中有json,是将对象序列化和反序列化的.在js中也有json
    用法如下:
            items  #这是一个字典
            Object {k1: 123, k2: "tony"}
            s = JSON.stringify(items)   # 序列化过程
            "{"k1":123,"k2":"tony"}"
            s                           # 查看序列化后的结果
            "{"k1":123,"k2":"tony"}"
            JSON.parse(s)               # 反序列化过程
            Object {k1: 123, k2: "tony"}
         这个一定要会

    undefined
        undefined表示未定义值
        var name;

    null
        null是一个特殊值


    5、循环语句
        var names = ["alex", "tony", "rain"];
    
    
        // 数组:方式一
        for(var i=0;i<names.length;i++){
            console.log(i);
            console.log(names[i]);
        }
    
    
        // 数组:方式二
        for(var index in names){
            console.log(index);
            console.log(names[index]);
        }
    
    
        var names = {"name": "alex", "age": 18};
    
    
        // 字典:方式一
        for(var index in names){
            console.log(index);
            console.log(names[index]);
        }

    // while循环
        while(条件){
            // break;
            // continue;
        }

    6. 条件语句
        //if条件语句
    
            if(条件){
    
            }else if(条件){
    
            }else{
    
            }
    
    
        var name = 'alex';
        var age = 1;
    
        // switch,case语句
            switch(name){
                case '1':
                    age = 123;
                    break;
                case '2':
                    age = 456;
                    break;
                default :
                    age = 777;
            }
    7、异常处理
        try{
    
        }catch(e) {
    
        }finally{
    
        }
    8、函数
    函数的声明
            function func(arg){
                return true;
            }

    匿名函数
            var func = function(arg){
                return "tony";
            }
        自执行函数
            (function(arg){
                console.log(arg);
            })('123')
    9、面向对象
        function Foo (name,age) {
            this.Name = name;
            this.Age = age;
            this.Func = function(arg){
                return this.Name + arg;
            }
        }
    
        var obj = new Foo('alex', 18);
        var ret = obj.Func("sb");
        console.log(ret);

    Dom

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。
    它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。
    我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。
    注:一般说的JS让页面动起来泛指JavaScript和Dom
    1、选择器
        document.getElementById('id');              # 通过标签id获取 对象,这里获得的对象只有一个,因为在html中id是不允许重复的
        document.getElementsByName('name');         # 通过name属性获取 指定的对象,这里获得的是列表,即使是只有一个也被放到列表里
        document.getElementsByTagName('tagname');   # 通过标签的种类获取指定的对象,这里获得的是列表,即使是只有一个也被放到列表里

    2、内容
    innerText # 获取标签对象内的所有文本值(不包括标签)
        var obj = document.getElementsByTagName('div') # obj获得的是列表,所以要取 [0]
        HTML页面body部分有以下代码:
            <div>
                sbssbsbsbsbs
                <h2 id="111">index1</h2>
            </div>
            <h2>index2</h2>
            <script type="text/javascript">
                var aaa = 1;
                switch (aaa) {
                    case 1:
                        console.log('111111');
                        break;
                    case 2:
                        console.log('222222');
                        break;
                    default:
                        console.log('333333');
                }
            </script>
            用谷歌浏览器打开上面这个网页,并且在console中输入以下内容:
    var obj = document.getElementsByTagName('div')
    obj[0].innerText
    "sbssbsbsbsbs
    index1
    "
    上面我们看到div标签中有字符串和一个h2标签,当使用 obj.innerText获取内容的时候,把div里的字符串和h2标签里的内容都获取到了,但是却没有获取到h2标签(只是把标签的字符串值拿到了)
    innerHTML # 获取标签对象内的所有值(包括标签)
    接着上面的例子,我们使用innerHTML看看获取到什么值?
    obj[0].innerHTML
    "
    sbssbsbsbsbs
    <h2 id="111">index1</h2>
    "
    把包含在div标签下的子标签+字符串都获取到了.

    var obj = document.getElementById('nid')
    obj.innerText # 获取文本内容
    obj.innerText = "hello" # 设置文本内容
    obj.innerHTML # 获取HTML内容
    obj.innerHTML = "<h1>asd</h1>" # 设置HTML内容

    总结:innerText 和 innerHTML取文本内容和包含标签的内容
    但是又些特殊的标签,就不能使用innerText来获取值,只能使用obj.value来获取值.
    特殊的:
    input系列
    textarea标签
    select标签
    value属性操作用户输入和选择的值
    代码实例1:
            <form action="">
                <input type="text" name="username" value='123'>
                <input type="password" name="pwd" value="456">
            </form>
    
            <script>
                var obj1 = document.getElementsByName('pwd')[0] ;
                var obj2 = document.getElementsByName('username')[0];
                console.log(obj1,obj2)
                console.log(obj1.value,obj2.value)
            </script>
        代码实例2:(代码实现了获取文本内容,并修改文本内容.这个例子要看懂,)
            <body>
                <input type="text" id="text1">
                <input type="button" value="获取input里的值" onclick="getvalue();"/>
                <script type="text/javascript">
    
                    function getvalue(){
                        var obj1 = document.getElementById('text1')
                        var text = obj1.value
                        alert(text)
                        obj1.value = ''
                    }
                </script>
            </body>
        代码实例3:(获取select里的value)
            <body>
                <select id="n3">
                    <option value="1">11</option>
                    <option value="2">22</option>
                    <option value="3">33</option>
                </select>
                <input type="button" value="获取input里的值" onclick="getvalue();"/>
                <script type="text/javascript">
    
                    function getvalue(){
                        var obj1 = document.getElementById('n3')
                        console.log(obj1.value)
                        alert(obj1.value)
                    }
                </script>
            </body>

    代码实例4:
    场景:有a连接,我们希望点击a连接的文本在添加一条一模一样的a连接怎么做?
            <body>
                <a href="http://www.oldboyedu.com/" onclick="f1();">添加</a>
                <script type="text/javascript">
                    function f1(){
                        alert(123)
                    }
            </script>
        上面的代码,会出现当你添加a连接,后,f1()里的js代码会执行,但执行完成后,紧接着会跳转到www.oldboyedu.com 这个网站.
    那么问题来了.我们不希望在执行完f1()函数后跳转应该怎样实现呢? 实现方法,就是定义a标签的onclick事件反回false,这样就不会跳转了.
    于是代码如下:
            <body>
                <a href="http://www.oldboyedu.com/" onclick="return f1();">添加</a>
                <script type="text/javascript">
                    function f1(){
                        alert(123)
                        return false
                    }
                </script>
    
            </body>


    小扩展:
    有下面这段html代码
        <body>
            <ul>
                <li>111</li>
                <li>222</li>
                <li>333</li>
            </ul>
            <script>
                var lis = document.getElementsByTagName('li');
                for(var i in lis) {
                    console.log(i);
                }
            </script>
        </body>

    用谷歌浏览器打开,你会发现,for循环不仅打印了111,222,333还有其他的一些元素.如下:
        0
        1
        2
        length
        item
        namedItem

    这样就不是我们想要的结果了.那么如何解决呢.就用关于数组的第二种for循环方法:
        <body>
            <ul>
                <li>111</li>
                <li>222</li>
                <li>333</li>
            </ul>
            <script>
                var lis = document.getElementsByTagName('li');
                for(var i = 0;i<lis.length;i++){
                    console.log(i)
                }
            </script>
        </body>
        浏览器打开此页面,看到console中显示:
        0
        1
        2
        接下来看一个小实例:我们看到有些页面让你填写购买商品的数量,然后旁边有一个加号,和减号.那么如何实现的呢?
        <body>
            <input type="button" value="-" onclick="sub_num();"/>
            <div id="num">1</div>
            <input type="button" value="+" onclick="add_num();"/>
            <script>
                function add_num(){
                    var obj = document.getElementById('num');
                    var get_num = parseInt(obj.innerText);
                    get_num += 1;
                    obj.innerText = get_num
                }
                function sub_num(){
                    var obj = document.getElementById('num');
                    var get_num = parseInt(obj.innerText);
                    if(get_num<=0){
                        alert("数量不能为负数")
                    } else {
                        get_num -= 1
                        obj.innerText = get_num
                    }
                }
            </script>
        </body>

    js 中操作的步骤:
    1.找到这个标签
    2.获取标签里的字符串
    3.将获取到的值加1或者减1
    3、创建标签
    方式一(采用对象的模式):
            var obj = document.createElement('a');
            obj.href = "http://www.etiantian.org";
            obj.innerText = "老男孩";
    
            var container = document.getElementById('container');
            //container.appendChild(obj);
            // 对象要被添加的地方,必须使用appendClild(),如果使用container.innerHTML = obj 添加的不是整个标签对象,而是http://www.etiantian.org 这个字符串.
            // 记住,如果要使用对象模式,就使用appendChild
            //container.insertBefore(obj, container.firstChild);
            //container.insertBefore(obj, document.getElementById('hhh'));

    方式二:
            var container = document.getElementById('container');
            var obj = "<input  type='text' />";
            container.innerHTML = obj;
            // 'beforeBegin', 'afterBegin', 'beforeEnd',  'afterEnd'
            //container.insertAdjacentHTML("beforeEnd",obj); 前面指定位置,后面那个参数指定要加的对象

    4、标签属性
        var obj = document.getElementById('container');
        固定属性
            obj.id
            obj.id = "nid"
            obj.className
            obj.style.fontSize = "88px";
            #我们知道在fontSize在style的真实写法是 style = 'font-size = 88px;'
            # 所以当通过 obj.style.xxYx 找style里面的元素时,遇到 - 的时候,就把-去掉,并把-后面的字符大写:如font-size 写成 fontSize
    
        自定义属性
            obj.setAttribute(name,value)
            obj.getAttribute(name)
            obj.removeAttribute(name)

    5、提交表单
        document.geElementById('form').submit()
        之前我们做提交表单,都是使用form标签,普通方式的代码如下:
            <form action="http://www.sogou.com/web" method="get">
                <input name="query" type="text" >
                <input type="submit" value="提交">
            </form>
        这是我们通过submit标签提交的,那么我们想,能不能通过div标签提交?
        能,默认肯定不能提交,解决办法那是不是在div中加onclick事件,
        提交的流程:
            1.找到这个要提交的form 标签
            2. 执行form_obj.submit()方法就可以提交了.
        代码如下:
        <body>
            <form id="form1" action="http://www.sogou.com/web" method="get">
                <input name="query" type="text" >
                <!--<input type="submit" value="提交">-->
                <div onclick="f1();">提交</div>
            </form>
            <script type="text/javascript">
                function f1() {
                    document.getElementById('form1').submit();
                }
            </script>
        </body>

    上面的知识点:不仅submit可以提交form表单,其他也可以.
    设置默认要求提交时表单不能为空:
    场景:我们知道当我们登录网站,输入用户名和密码时,要通过form标签和input里的submit类型标签.
    正常情况下,我们点击submit标签就会把form中的input.value内容提交到后台.
    那么如用户只输入用户名没输入密码时,是不是要告诉用户:"你有没填写的字段,不能提交".
    实现方法就是在submit标签加上onclick事件,然后去校验几个input标签里是否有值.如果没满足条件就让onclick事件反回false.
    具体代码如下:
            <body>
                <form id="form1" action="http://www.sogou.com/web" method="get">
                    <input name="query" type="text" >
                    <input type="submit" onclick="return f3();" value="提22交">
                </form>
                <script type="text/javascript">
                    function f3() {
                        var q = document.getElementsByName('query')[0];
                        if (q.value.trim()){
                            alert('11111')
                            return true;
                        } else {
                            alert("22222");
                            return false;
                        }
                    }
                </script>
            </body>

    6、事件


    7、其他功能
        console.log()
        alert()
        confirm()
        # confirm 有什么用呢?我们在页面上删除某条纪录,有时会出来一个"确认""取消"的窗口,这就是confirm.
        确认反回的是true,取消反回的是false
        代码举例:
            <body>
                <input type="button" value="上来啊" onmousemove="MyConfirm();">
                <script>
                    function MyConfirm(){
                        var ret = confirm("是不是要点!")
                        alert(ret)
                    }
                </script>
            </body>
        这是confirm最简单的实现方法,真实开发中,一般情况下confirm弹窗咱们是自己写的,因为默认的太难看了.
    
        // URL和刷新
        location.href 获取当前html文件的访问路径
        location.href = "url"   可以获得,当然也可以赋值,赋值的时候相当于跳转了
        window.location.reload() 重新加载
    
        这两个好用处不大
    
        // 定时器
        setInterval("alert()",2000);
        clearInterval(obj)
        #告诉大家,setInterval其实就是每隔多长时间创建一个线程,用这个东西能做什么呢?可以做标签的滚动效果.
    
        setTimeout();   # 和setInterval 用法一样,不一样的是只执行一次.比如说setTimeout('f1()',2000)意思是过两秒后执行一次f1函数
        clearTimeout(obj)
        # setTimeout() 的应用场景:我们看到qq邮箱删除邮件的时候,在页面上会提示删除邮件成功,5秒后这个提示字样消失了.就是用setTimeout做的.
        # 具体是,当你点击删除的时候,立马跳出删除成功的标签.紧接着在函数中在调用setTimeout('删除这个标签的函数',5000)

    jQuery 简介
    学了jQuery后,你不能理解为就不用js和Dom了,应该说复杂的操作都用jQuery操作.而相对于简单的操作,jQuery没必要去封装简单的操作.
    jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在兼容性方面十分优秀。
    http://www.php100.com/manual/jquery/
    我们使用js,dom ,jQuery 最终目的让html页面动起来.
    动起来技术实现方法就是让 事件 和 改html文件里的内容 关联起来
    改 html 文件内容就需要两部分:
    1. 获取要改动的标签
    2. 修改
    无论是使用js还是使用jQuery都是围绕着上面两个目的进行的 .
    所以jQuery提供的方法,从功能上大致就分为两个方法:1.获取标签 2.修改
    jQuery实现了几百种方法,多,但是无论多牛B的网站也都没全用到,只会用到那么一些常用的(大概几十种).

    jQuery之基本选择器
    jQuery中提供的用于获取标签的方法都有哪些?
    jQuery提供的 "选择器" 和 "筛选器" 两大分类都是用于获取标签的方法.
    选择器获得的是结果集,筛选器是从结果集里跳出来指定条件的 很好理解
    筛选器: 过滤 查找 串联
    最基本的选择器(3种):
        $("#id").text('123');  #id 选择器,找到1个对象
        $("a").text('2222'); # 标签选择器,找到对象集合,并且内部循环将这些对象的字符串值设置成222
        $(".c1").text('3333') # class选择器,找到 对象集合,并且内部循环将这些对象的字符串值设置成333
        上面3中选择器是jQuery中最基本的选择器,一定要会.
    还有要会组合使用它们,如:
        $("#n3 div .c4 span").text('4444') # 找到id为n3标签下的div标签下的class为c4下的span标签的字符串值设置成4444
        一次查找多个类型的选择器时用逗号隔开,如下:
        $("div,a,.c4").text('555') 查找所有div,所有a标签以及所有calssname为c4的标签,并把它们的字符串值设置成555

    接下来看看一些其他选择器:不要求记住,但是你要知道,当碰到某些场景,你能想起来哪种类型的,能够查到即可.
    比较重要的:
    属性选择器类:
    筛选器以下几种必须要会:
    children() 目标标签的儿子们
    find() 找到的结果集中find
    next() 目标标签的下一个兄弟标签
    nextAll() 目标标签的下面的所有兄弟标签
    parent() 目标标签的父标签
    prev() 目标标签的上一个标签
    prevall() 目标标签的上面所有的兄弟标签
    siblings() 目标标签的所有兄弟标签
    这些筛选器里的方法只要记住,能完成99.99%的工作
  • 相关阅读:
    install_bugzilla
    R610 & R710 网卡问题
    总结开发者在合作过程中的典型交流方式
    vnc报错 font catalog is not properly configured
    eclipse插件安装
    extjs 点击链接到另一个页面 并激活另一个页面的指定tab
    centos c++ 找不到头文件mysql.h
    升级struts 2
    oracle 删除用户报错
    mysql 创建用户及授权
  • 原文地址:https://www.cnblogs.com/zhming26/p/5699740.html
Copyright © 2011-2022 走看看