Lession06 文档对象模型

查找Html元素

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>使用DOM访问文档对象的元素</title>
    </head>
    <body>
        <h1>获取元素节点</h1>
        <input type="text" id="username" value="tom" name="uname"><br>
        <input type="text" id="useremail" value="tom@163.com" name="uemail">
        <div>today is very good</div>
    </body>
</html>
<script>
    //1.document.getElementById   id属性值获取元素节点
    var username = document.getElementById('username');
    console.log(username);
    var email=document.getElementById('useremail');
    console.log(email);
    //2.document.getElementsByTagName  tag标签名称获得元素节点
    var hh = document.getElementsByTagName('h1');
    console.log(hh);
    //通过getElementsByTagName收集的元素节点以“集合/数组”(即使只有一个节点)的形式返回
    console.log(hh[0]);
    
    var its = document.getElementsByTagName('input');
    console.log(its);
    console.log(its[1]);//访问具体节点
    console.log(its.item(0));//访问具体节点
    //3.document.getElementsByName name属性值获得元素节点
    var it = document.getElementsByName('uname');
    console.log(it);
    //通过getElementsByName收集的元素节点以“集合/数组”(即使只有一个节点)的形式返回
    console.log(it[0]);
    console.log(it.item(0));
    
    //文本节点获取
    
    var dv = document.getElementsByTagName('div')[0];
    //firstChild获得第一个子节点/lastChild获得最后一个子节点
    console.log(dv.firstChild);
    //文本对象
    //alert(dv.firstChild);
    //获得文本信息
    console.log(dv.firstChild.wholeText);
    //alert(dv.firstChild.wholeText);
    
    //parentNode 获得父节点
    console.log(dv.parentNode);
    
    // nextSibling:获得下个兄弟节点
    // previousSibling:获得上个兄弟节点
    //childNodes:父节点获得内部全部的子节点信息

</script>

属性值操作

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>属性值操作</title>
        <script>
        // 1.获取属性值
        // 元素节点.属性名称;   //只能操作w3c规定的属性
        // 元素节点.getAttribute(属性名称);  //规定的 和 自定义的都可以获取
        // 2.设置属性值
        // 元素节点.属性名称 = 值;  //只能操作w3c规定的属性
        // 元素节点.setAttribute(名称,值); //规定的 和 自定义的都可以设置

        
        </script>
    </head>
    <body>
        <h2>属性值操作</h2>
        <a href="http://www.baidu.com" target="_blank" addr="beijing" class="apple">百度</a><br>
        <input type="button" value="修改属性" onclick="f1()"><br>
    </body>
</html>
<script>
    var baidu=document.getElementsByTagName('a')[0];
    //1.获得属性的信息
    console.log(baidu.href);
    console.log(baidu.target);
    console.log(baidu.addr);//这个是自定义的属性
    console.log(baidu.getAttribute('addr'));
    console.log(baidu.getAttribute('href'));
    //console.log(baidu.class);
    console.log(baidu.className);//className是class的一个别名,不可以直接访问class属性
    
    
    //2.设置属性的信息
    
    function f1(){
        baidu.href="http://www.hao123.com";
        baidu.target="_self";
        baidu.addr="tianjin";
        
        //属性修改,有就更新,没有就创建
        baidu.setAttribute('addr','shanghai');
        baidu.setAttribute('height','170');//新创建
    }
    
</script>

案例1

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>案例01</title>
        <script>
            function f1(){
                var i =0;
                i=Math.floor(Math.random()*4+1);
                document.getElementById('imgs').src="img/"+i+".jpg";
                timer=setTimeout("f1()",1000);
            }
            function f2(){
                //清除定时器
                clearTimeout(timer);
            }
        </script>
    </head>
    <body>
        <img src="img/1.jpg" alt="" id="imgs" width="200px" height="200px">
        <input type="button" value="开始" onclick="f1();">
        <input type="button" value="停止" onclick="f2();">
    </body>
</html>


案例02

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>案例02</title>
        <script>
            function fun(flag){
                var sels = document.getElementsByName('ck');
                for(var i=0;i<sels.length;i++){
                    sels[i].checked=flag;
                }
            }
        </script>
    </head>
    <body>
        <form action="">
            请选择你喜欢的战队:<br>
            <input type="checkbox" name="ck" value="0">EDG
            <input type="checkbox" name="ck" value="1">RNG
            <input type="checkbox" name="ck" value="2">IG
            <input type="checkbox" name="ck" value="3">FPX
            <input type="button" value="全部选中" onclick="fun(true)">
            <input type="button" value="全不选中" onclick="fun(false)"> 
        </form>
    </body>
</html>


增删改元素

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>增删改元素</title>
        <script>
            /*
            节点创建
            元素节点:document.createElement(tag标签名称);
            文本节点:document.createTextNode(文本内容);
            属性设置:node.setAttribute(名称,值);
            节点追加:
            父节点.appendChild(子节点);
                父节点.insertBefore(newnode,oldnode); //newnode放到oldnode的前边
                父节点.replaceChild(newnode,oldnode); //newnode替换到oldnode节点
            父节点.removeChild(子节点);
            */
        
        </script>
    </head>
    <body>
        <ul>
            <li mean="热情">red</li>
            <li mean="忧郁">blue</li>
            <li mean="生机">green</li>
        </ul>
        <ul>
            <li mean="希望">orange</li>
        </ul>
    </body>
</html>
<script>
    var color = ['red','blue','green'];
    var color_mean=['热情','忧郁','生机'];
    //创建各种节点
    var ull = document.createElement('ul');
    for(var k in color){
        var lii = document.createElement('li');
        lii.setAttribute('mean',color_mean[k]);
        var txt = document.createTextNode(color[k]);
        
        //节点追加
        lii.appendChild(txt);
        ull.appendChild(lii);
    }
    document.body.appendChild(ull);
    
    //给第二个ul追加页面已有的节点:blue被追加进来
    //注意:被追加节点要发生物理位置移动(节点个数是固定的)
    var blue = document.getElementsByTagName('li')[1];
    var second_ul = document.getElementsByTagName('ul')[1];
    second_ul.appendChild(blue);
    
    
    //orange追加给第一个ul,并设置到blue的前面
    var orange=document.getElementsByTagName('li')[2];
    console.log(orange);
    var first_ul = document.getElementsByTagName('ul')[0];
    console.log(first_ul);
    //first_ul.appendChild(orange);//orange追加到最后
    var red=document.getElementsByTagName('li')[0];
    first_ul.insertBefore(orange,red); //orange放在red的前边
    
    first_ul.replaceChild(orange,red);//orange替换掉red
    //删除green节点
    var green = document.getElementsByTagName('li')[1];
    green.parentNode.removeChild(green);
</script>

window对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>window对象</title>
        <script>
        /*
        浏览器里面,window对象指当前的浏览器窗口。它也是当前页面的顶层对象,
        即最高一层的对象,所有其他对象都是它的下属。
        
        
        */
     //   alert("弹框1");
     //  window.alert("弹框2");
     //  window.confirm("确定要删除吗?");
     //  if(confirm("确定删除吗?")){
        //   alert("删除");
     //  }
        // var num =window.prompt("请输入一个数字");
        // document.write(num);
        
        
        window.onload=function(){
            var dv = document.getElementById('demo');
            function f1(){
                var time = new Date();
                var year = time.getFullYear();
                var month = time.getMonth()+1;
                var date = time.getDate();
                var hour = time.getHours();
                var minute = time.getMinutes();
                var second = time.getSeconds();
                dv.innerHTML="现在是"+year+"-"+month+"-"+date+"  "+hour+":"+minute+":"+second
            }
            
            window.setInterval(f1,1000);
        }
        
        
        function f2(){
            //打开新窗口 open("url","name","窗口特征")   宽  高   菜单栏=1是显示 工具栏,滚动条,状态栏的信息=1显示
         var newWin=window.open('demo06-1.html','',"width=500px,height=500px,menuBar=1,toolBar=1,scrollBars=1,status=1");
            newWin.status="这个一个状态";
        }
        
        function openWindow(){
            //通过这种打开新窗口的方式,可以将子窗口的值传给父窗体
            var val = window.showModalDialog('demo06-1.html','','dialogWidth=300px,dialogHeight=300px');
            //关闭子窗体的值会返回到val中
            document.myform.add.value=val;
        }
        
        </script>
    </head>
    <body>
        <div id="demo"></div>
        <!-- 打开定制窗口 IE-->
        <input type="button" value="打开定制新窗口" onclick="f2()">
        
        <!-- 把子窗口的值传回父窗口中 -->
        <form name="myform">
        请输入你的地址:
        <input type="text" name="add"> <a href="javascript:openWindow();">选择送货地址</a>
        </form>
    </body>
</html>

//demo06-1.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
        function closeWindow(){
            var addr = document.myform.addr.value;
            console.log(addr);
            //使用window.returnValue属性把子窗体关闭后的值传给父窗体 谷歌不支持
            window.returnValue=addr;
            window.close();
            
        }
            
        </script>
    </head>
    <body>
        <form name="myform">
        地址:<input type="text" name="addr">
        <input type="button" value="确定" onclick="closeWindow()">
        </form>
    </body>
</html>

Document对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Document对象</title>
        <script>
            //Document对象的集合属性是基于数组的,提供对象的数组 有forms[],images[],links[]
            function pressMe(){
                //Document对象的forms[]数组包含文档中所有的form对象
                //使用form对象的elements[]属性代表表单中的元素
                var val = document.forms[0].elements[0].value;
                document.forms['f2'].elements[0].value=val; 
            }   
        </script>
    </head>
    <body>
        <form name="f1">
            <input type="text" name="message">
            <input type="button" value="按下我的传递值" onclick="pressMe()">
        </form>
        <form name="f2">
            <input type="text" name="show">
        </form>
        <h2>锚点</h2>
        <ol>
            <li><a href="#one">111111111111111</a></li>
            <li><a href="#two">222222222222222</a></li>
            <li><a href="#three">33333333333333</a></li>
        </ol>
        <a name="one">aaaaaaaaaaaaaaaa</a>
        <a name="two">bbbbbbbb</a>
        <a name="three">ccccccc</a>
        <h2>超链接</h2>
        <ol>
            <li><a href="http://www.baidu.com">百度</a></li>
            <li><a href="http://www.sina.com">新浪</a></li>
        </ol>
        <script>
            document.write("页面定义了"+document.links.length+"个超链接<br>");
            for(var i =0;i<document.links.length;i++){
                document.write(document.links[i].href+"<br>");
            }
            //anchors(读:aoke)
            document.write("页面定义了"+document.anchors.length+"个锚点<br>");
            for(var j=0;j<document.anchors.length;j++){
                document.write(document.anchors[j].name+"<br>");
            }
                    
        </script>
    </body>
</html>

Location对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Location对象</title>
        <script>
            function changeURL(){
                window.location="http://www.baidu.com";
            }
        </script>
    </head>
    <body>

        <input type="button" value="转到百度" onclick="changeURL()">
    </body>
</html>

History对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>History对象</title>
        <script>
            /*
            window.history.back();
            window.history.forward();
            
            windiw.history.go(-1);//相当于back()
            window.history.go(1);//相当于forwar()
            window.history.go(0);//相当于刷新
            window.history.length;//查看历史记录栈中一共有多少个记录
            */
           
        </script>
    </head>
    <body>
        <a href="javascript:history.go(-1)">返回</a><!-- 相当于调用history对象的back()方法 -->

        <a href="javascript:history.go(1)">前进</a> <!-- 相当于调用history对象的forword()方法 -->
    </body>
</html>


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容