Js如何操作DOM? 网景公司开发的浏览器运行的脚本语音:livescript;

浏览器有html源码渲染功能,将html源码在内存里形成一个DOM对象,也就是文档对象;

还有javascript解释器,js代码被引擎执行操作DOM对象。

现在最快的js解释器是chrome里面的V8引擎;

服务器js解释器node.js;

 


学习内容:
    1、javascript本身的语法;
    2、DOM对象;文档对象模型;
    3、BOM模型 browser,浏览器模型;

编程公用的东西:变量,控制语句(条件/分支/循环),表达式,语句;

编程语言都是生活中的一种抽象;

变量:
    0、存储位置 ---> 内存存储地址;
    1、变量名;
    2、变量值;
    3、变量类型;
变量名,并不能直接体现变量的值,只能体现该变量在内存中的位置;
如果没有任何一个变量名指向内存地址,则该地址会被回收;

引用赋值:(传地址)修改其中一个变量会影响另一个变量

在javascript中数组、对象、函数默认是引用赋值;

eg:var a = {'age':2; 'name':'tome'};

    var b = a;

    b.age = 5;//这时a.age = 5;

其它的为传值赋值;两个变量的值互不相关;

eg:var a = 3;

    var b = a;

    var b = 5;//这个时候a依然是3;

 

变量名:
    1、以字母,数组,下划线组成;第一个字母只能是字母或者下划线;
    2、新的js标准支持UNICODE字符作为变量名;也就是说可以使用中文命名了;
    3、变量名区分大小写;html不区分大小写;

如果在定义变量时不使用var,则变量为全局变量;造成“全局污染”

变量类型:
    1、数值类型;
    2、字符串类型;
    3、布尔值类型;//false or true;
    4、null;//内存里有地址,没有任何结构化的空值;
    5:undefined;//从来不存在,在内存就没有;
    6、数组类型;
    7、对象类型;
    8、函数类型;

js引入方式:(和css非常的相似)
    1、写在标签里面;链接内部
    <script type='text/javascript'>
        code...
    </script>
    2、写在专门的js里面;链接外部;
    <script type='text/javascript' src='xx.html'></script>
    3、内联

    <a href='#' onclick="alert('hello')"></a>

 


javascript系统函数:
    1、escape(string):转成计算机通用的unicode码;
    2、unescape(string):对应的解码;
    3、isFinite():判断一个数组是否为有限的;
    4、isNaN():判断一个变量是否为“非数字”;
    5、parseFloat():转换为浮点型;
    6、parseInt():将字符串的前缀部分的数字转换为整型数组;如果第一个不是数字则停止查找返回NaN;NaN表示非数字;
    7、eval('json:json'):执行一段js代码;将字符串当作一段js代码进行执行;

数组:一组变量集合;
创建数组的方式:
    a:创建空数组
        1、var arr = new Array();
        2、var arr = [];
    b:创建一个有初始值的数组
        1、var arr = new Array('a','b','c');
        2、var arr = ['a','b','c'];
    c:创建一个有初始单元数量的数组:
        var arr = new Array(5);
对象:
    和数组本质是一样的,都是组织一堆数据,只不过对象下标不为数字其无序;
    数组的索引对应了对象的方法或者方法;
    因为对象下标是无序的,所以在创建对象的时候必须指定对象的属性与方法,数组就不需要指定索引;
    语法:
        var obj = {name:value;age:value};
    获取属性值:
        1、var t = obj['name'];
        2、var t1 = obj.name;
    遍历:
        使用for...in结构来遍历;
        //该方法将obj里面的属性挨个取出来赋给per;
        //有了属性就可以取得属性值了;但是在使用时只能使用第一种方法,即obj['name'];
        var per;
        for( per in obj ){
            code...
        }
    删除对象属性:
        delete obj.name;//则该对象的单元值就这样被删除了;

在js中函数本身也是变量,数组和对象存储的就是"变量",如果对象的属性值是一个函数,那么我们通常称这样的属性为"方法";

Js中内置属性:
在js中,所有的变量都可以被js引擎包装成"对象"来处理;并给属性赋予了一些属性和方法;

DOM操作:
DOM节点与层次;常用的三种节点类型:(节点对象)
    1、元素节点;//
、<a>;
    2、属性节点;//<p id='name'>

中的id;
    3、文本节点;//<span>hello中的hello;

重要基础:对应DOM节点的查找;
获取元素方式:
    1、document.getElementById('xx');//返回对拥有指定 ID 的第一个对象的引用。
    2、document.getElementsByTagName('xx');//返回带有指定名称的对象的集合。数组;该属性除了document对象可以使用,其它的对象也可以使用,而其它两个属性其它对象不能使用;
    3、document.getElementsByName('xx');可返回带有指定标签名的对象的集合。数组;
补充知识点:typeof [var]str;返回变量str的类型;
注意:早起浏览器认为name只出现在表单中,因此document.getElementsByName()最对表单中的元素发挥中用。
后来部分浏览器把那么属性扩展到一般的元素如div,但是ie没有改变,还是最能对表单使用byName,因此出于兼容性,尽量只对表单使用byName;

改变节点css:每个节点都有一个style子对象,该对象的属性就可以修改css了

如果通过上面三种方式没有查到想要的结果,还可以根据前面已经找到的节点再次定位,继续查找;
    1、查找子元素:
        childNodes/child[index] //查找子节点(xml属性);缺点会将</div><div>之间的空白当作为空白文本节点;
        children[index]://这个属性,会忽略空白文本节点;
        firstChild,lastChild;
    2、查找父元素:
        node.parentNode  ----->获取父元素;
    3、查找兄弟元素:
        nextSibling,previousSiblint;


添加节点:
步骤:
    1、创建节点p;
    2、把节点p附近到container里面;
    代码:
        var nodep = document.createElement('p');
        var cont = document.getElementById('container');
        cont.appendChild(nodep);
创建文本节点:document.createTextNode('ab');
插入元素,并插在最后:node.appendChild(childNode);
复制克隆一个节点:oldNode.cloneNode(true/false);//true:复制所有子节点,false:只复制指定的节点和它的属性;

删除节点:objDocumentNode = xmlDocumentNode.removeChild(oldChild);

DOM事件:“监听属性”
声明:
    1、直接在元素标签中声明:<input type="text" />

类型:
    1、页面上变化引起的,eg:onBlur,onLoad;
    2、鼠标变化引起的,eg:点击,经过,离开;
    3、键盘引起的事件,eg:onkeypress,onSubmit;
注:onsubmit事件比较特殊,在<form onsubmit="return function();"这样函数在return false时,才能阻拦住表单的提交行为; asdangjlvus


(转载请保留)文章出处:http://www.ajtrip.cn/ 安吉旅游网