2019.08.03(day04)
dom编程:

查询:
  -通过id查询
  -通过name查询
  -通过标签名查询
  -通过表单名查询

根据id查询
   document.getElementById("");
   通过id查询返回元素节点,
   在整个html文档中搜索id
   只找到第一个id,返回元素
   如果id错误,返回null

根据层次查询节点:
 -parentNode
   遵循文档的上下文层次结构,查找单个父节点
   比如:

<table id="tblid">
         <tr>
            <td id="tdid"></td>
            <td></td>
         </tr>
       </table>
    var td_ele=document.getElementById("tdid");
    var tr_ele=td_ele.parentNode;
    var table_ele=td_ele.parentNode.parentNode;

  -childNodes
     遵循文档的上下文层次结构,查找多个子节点
     比如:上面的例子

var td_ele=document.getElementById("tdid");
      //获取当前td对象的所有兄弟
      var tds_ele=td_ele.parentNode.childNodes;      
      //获取当前td的父亲,和所有叔叔节点
      var trs_ele=td_ele.parentNode.parentNode.childNodes;

根据标签名查询节点:
    getElementsByTagName("标签名");
    从当前对象往下寻找符合标签名的所有元素对象
    返回结果是一个数组
    标签名错误,返回长度为0,
    比如:

<table id="tblid">
         <tr>
            <td id="tdid"></td>
            <td></td>
         </tr>
       </table>
       
    var table_ele=document.getElementById("tblid");
    var trs_ele=table_ele.getElementsByTagName("tr");

根据name属性查询节点
  document.getElementsByName("元素的name属性值");
  注意:不是所有的元素节点都有name属性

根据document.表单名字.表单控间名
    docuemnt.forms[数字].表单控件名 
    

创建元素节点:
  document.createElement(元素节点名);
  返回结果是创建的节点对象
 
创建文本节点:
  document.createTextNode("文本信息");
  返回结果是一个文本节点对象
  
添加新节点:
  parentNode.appendChild(newNode);
  追加newNode节点到父节点的所有子节点的最后.

  parentNode.insertBefore(newNode,refNode);
  把newNode插入到refNode的前面
  newNode和refNode是兄弟关系
  
删除节点:
node.removeChild(childNode)
  删除node节点下的childNode的节点对象
  
  
定位节点:
  parentNode.firstChild;第一个子节点
  parentNode.lastChild;最后一个子节点

js的神奇之处:
  自定义对象:是一种特殊的数据类型,由属性和方法封装而成
     属性:与对象有关的的值   对象名.属性名  div_ele.id="divid";
     方法:指对象可以执行的行为或可以完成的功能
           对象名.方法名();创建js的自定义对象:
1.直接创建对象
  比如:

function testObject(){
    var personObj=new Object();
    
    //添加属性
    personObj.name="zhangsan";
    personObj.age=30;
    
    //添加方法
    personObj.say=function(){
        alert("hello");
    }
    
    //使用新添加的方法和属性
    personObj.say();
    alert(personObj.name+"   "+personObj.age);

   }

2.使用构造函数创建对象
  比如:

function Person(n,a,ad){
        //定义name和age属性
        this.name=n;
        this.age=a;
        this.address=ad;
        
        //定义方法showInfo
        this.showInfo=function(){
            alert(this.name+"   "+this.age);
        };
        //定义方法showAddreds
        this.showAddress=introAddress;
    }
    function introAddress(){
        alert(this.address);
    }
    
    //是由构造函数创建的对象
    function testOject1(){
        var p=new  Person("zhangsan",30,"beijing");
        alert(p.age);
        p.showInfo();
        p.showAddress();
        
        var p=new  Person("lisi",20,"shanghai");
        alert(p.age);
        p.showInfo();
        p.showAddress();
    }

  
使用json创建对象
  json(javaScript Object Notation) 是一个轻量级的数据交换格式
  json的说明:
    用{}代表对象
    用[]代表数组
    使用名/值的方式定义,名和值之间用 : 间隔
    名称需要使用""引起来
    多对定义之间使用 , 间隔了多少个月
    字符串的属性值用 "" 引起来
  比如:
  

var jsonObj={"name":"张三","age":30,"address":"北京"};
     alert(jsonObj.name);
     alert(jsonObj.age);
     alert(jsonObj.address);

    
js中的事件处理:
事件:指页面元素状态改变,用户在操作鼠标或键盘时触发的动作
  
  触发的动作:
    鼠标事件:  onclick  单击
              ondblclick   双击
              onmousedown   鼠标左键按下
              onmouseup     鼠标左键抬起
              onmouseover   鼠标划过(进入)
              onmouseout    鼠标移出
              onmousemove   鼠标在范围内移动
  
    键盘事件:  onkeydown     键盘按下
              onkeypress    键盘按下/按住
              onkeyup       键盘抬起
  
    状态改变事件:
              onblur        焦点失去
              onfocus       焦点获取
              onsubmit      表单提交      
              onchange      内容改变
              onselect      文本被选定
              onload        窗体完成加载
              onunload      用户退出页面
  
所有的事件原理都设计模式中的"监听者设计模式"; 
  
event对象:是js的内置对象  
  任何事件触发后将会产生一个event对象
  event对象记录事件发生时的鼠标位置,键盘按键状态
       和触发对象等信息
       
  获取event对象和使用event对象获得相关信息,单击的位置
  触发的对象
  

function ff(e){
                alert(e.clientX+":"+e.clientY);
                //e.srcElement,ie浏览器
                //e.target,firefox浏览器
                var obj=e.srcElement||e.target;
                alert(obj.nodeName);
            }
            <div onclick="ff(event)">event对象测试</div>

事件的冒泡机制:

function cancelBubble(e){
    alert("input button");
    //取消冒泡:
    if(e.stopPropagation){
        //火狐和谷歌浏览器的取消冒泡
        e.stopPropagation();
    }else{
        //ie浏览器的取消冒泡
        e.cancelBubble=true;
    }
}

 

{"name":"张三","age":30,"address":"北京","students":[{"name":"name1","age":20},{"name":"name2","age":20},{"name":"name3","age":20}]}

{
    "name": "张三",
    "age": 30,
    "address": "北京",
    "students": [
        {
            "name": "name1",
            "age": 20
        },
        {
            "name": "name2",
            "age": 20
        },
        {
            "name": "name\"",
            "age": 20
        }
    ]
}

[
    {
        "id": 1,    getId() setId()
        "userAddress": "chaoyang", getUserAddress() setUserAddress
        "userName": "zhangsan",
        "userPassword": "zs"
    },
    {
        "id": 2,
        "userAddress": "chaoyang",
        "userName": "lisi",
        "userPassword": "ls"
    },
    {
        "id": 3,
        "userAddress": "chaoyang",
        "userName": "wangwu",
        "userPassword": "ww"
    },
    {
        "id": 4,
        "userAddress": "chaoyang",
        "userName": "zhaoliu",
        "userPassword": "zl"
    },
    {
        "id": 5,
        "userAddress": "chaoyang",
        "userName": "tianqi",
        "userPassword": "tq"
    }
]


  
1.了解熟悉json数据格式
   a.用键值对表达数据
   b.{键值对,键值对,键值对...}  json对象
   c.[{}...,[]...]  json数组
   d.json数据中可以包含 json数据,json数组,数字,字符串,布尔
   e.json对象和json数组可以做合理的嵌套2.java对象和json数据的相互转换:
  借助第三方工具来实现相互转换
  阿里巴巴    fastjson
  国外        json-lib
  具体的参见testfastjson项目
            testjsonlib项目
  
3.javascript中的json对象和json字符串相互转换
   即,如何用js操作json数据

<html>
    <head>
        <title>用js操作json数据</title>
        <meta charset="UTF-8"/>
        <script src="json.js" ></script>
        <script>
            //访问json简单对象
            function f1(){
                var obj={"name":"zhangsan","age":20};
                alert(obj.name+"   "+obj.age);
            }
            //访问json复杂对象
            function f2(){
                var obj={
                    "name":"zhangsan",
                    "age":20,
                    "address":{
                        "city":"beijing",
                        "street":"杨庄大街",
                        "building":"首钢实训楼"
                    }
                };
                alert(obj.name+"  "+obj.age+"   "+obj.address.building);
            }
            //访问简单josn数组
            function f3(){
                var arr=[
                    {
                        "name":"zhangsan",
                        "age":20
                    },
                    {
                        "name":"lisi",
                        "age":21
                    }
                ];
                alert(arr[1].name);
            }
            //访问复杂的json数组
            function f4(){
                var arr={
                    "name":"zhangsan",
                    "age":20,
                    "friends":[
                        {
                        "name":"wangwu",
                        "age":20
                        },
                        {
                            "name":"zhaoliu",
                            "age":21
                        }
                    ]
                };
                alert(arr.name+"   "+arr.friends[1].name);
            }
            //把json字符串转换成javascript的json对象
            //eval函数方式转换(不推荐)
            function f5(){
                //这个str不是json数据,是一个json的字符串
                var str='{"name":"zhagnsan","age":20}';
                var obj=eval("("+str+")");
                alert(obj.name);            
            }
            //javascript原生写法(浏览器版本不能太低)json串-->json对象
            function f6(){
                var str='{"name":"zhagnsan","age":20}';
                var obj=JSON.parse(str);
                alert(obj.name);
            }
            //第三方工具(josn.js)json字符串-->json对象
            function f7(){
                var str='{"name":"zhagnsan","age":20}';
                var obj=str.parseJSON();
                alert(obj.name);
            }
            function f8(){
                var str='[{"name":"zhangsan","age":20},{"name":"wangwu","age":30}]';
                var obj=str.parseJSON();
                alert(obj[1].name);
            }
            //json对象-->json字符串
            function f9(){
                var obj={"name":"zhangsan","age":20};
                var str=JSON.stringify(obj);
                alert(str);
            }
        </script>
    </head>
    <body>
        <a href="javascript:f1();">访问简单json数据</a><br />
        <a href="javascript:f2();">访问复杂json数据</a><br />
        <a href="javascript:f3();">访问简单json数据(数组)</a><br />
        <a href="javascript:f4();">访问复杂json数据(数组)</a><br />
        <a href="javascript:f5();">eval函数方式转换(不推荐)</a><br />
        <a href="javascript:f6();">js原生写法(浏览器版本不能太低)json字符串-->json对象</a><br />
        <a href="javascript:f7();">第三方工具(josn.js)json字符串-->json对象</a><br />
        <a href="javascript:f8();">第三方工具(josn.js)json字符串-->json对象</a><br />
        <a href="javascript:f9();">json对象-->json字符串</a><br />

    </body>
</html>