zoukankan      html  css  js  c++  java
  • BOM小结以及文档节点基础

    在之前学习过程中,由于某些原因,先去看了DOM相关,而略过了BOM,在昨天终于是把BOM这部分补上。

    BOM的概念就不多说,BOM的核心是window对象,window对象定义了3个【alert(),confirm(),prompt()】人机交互的接口方法方便开发人员进行调试。

    其中alert()包含一个可选的提示信息参数,用于向用户弹出提示性信息。

    confirm()包含两个按钮(确定与取消)如果点击”确定“则该方法返回true;点击“取消”则该方法返回false

    prompt()可以接受用户输入的信息,并把用户输入的信息返回。

    一,alert()

    下面是一个自定义的alert()方法,并没有完成所有代码,可以继续编辑

    编辑框架

     <!--编写一个alert()-->
        <style type="text/css">
            /*对话框设置在中央显示*/
            #alert_box {
                position: absolute;
                left: 50%;
                top: 50%;
                width: 400px;
                height: 200px;
                display: none;
            }
            /*设置外框样式并固定宽和高*/
            #alert_box dl{
                position:absolute;
                left:-200px;
                top:-100px;
                width:400px;
                height:200px;
                border:solid 1px #999;/*设置外框为实线,宽度为1px,颜色编号为#999*/
                border-radius:8px;/*圆角*/
                overflow:hidden;
            }
            /*设计对话框标题栏样式*/
            #alert_box dt{
                background-color:#ccc;
                height:30px;
                text-align:center;
                line-height:30px;
                font-size:15px;/*可缩小的字体缩小为15px*/
            }
            /*对话框内容框基本样式*/
            #alert_box dd{
                padding:6px;
                margin:0;
                font-size:12px;
            }
        </style>
    </head>

    调用及内容

     <script>
            window.alert = function(title,info){
                var box = document.getElementById("alert_box");
                var html='<dl><dt>'+title+'</dt><dd>'+info+'</dd></dl>';
                if(box){/*窗口中已存在提示对话框,则直接显示内容*/
                    box.innerHTML = html;
                    box.style.display = "block";
                }
                else {//不存在对话框,则创建新的对话框,并显示内容
                    var div = document.createElement("div");
                    div.id = "alert_box";
                    div.style.display = "block";
                    document.body.appendChild(div);
                    div.innerHTML = html;
                }
            }
            alert("这里是标题君", "我是内容xxx");
        </script>

    二,框架集

    在每一个框架中,window对象始终指向的都是那个框架实例,而非最高级的框架;top对象始终指向最高级的框架,也就是浏览器窗口;paernt对象始终指向当前框架的上层框架。(在某些情况下,paernt=top)

    在框架集中可以将不同层次的window对象连接起来,进行一些操作

    先建立一个框架集,

            
            <title>框架集</title>
            <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        </head>
        <frameset rows="50%,50%"cols="*" frameborder="yes" border="1" framespacing="0"> //第一行占50%,第二行占50%,cols(列数),框架之间是否有边框。边框宽度,框架之间是否有间距
            <frameset rows="*" cols="33%,*,33%" framespacing="0" frameborder="yes" border="1">
                <frame src="事件.html" name="left" id="left" />
                <frame src="节点.html" name="middle" id="middle" />
                <frame src="正则表达式.html" name="right" id="right" />
            </frameset>//第一行
            <frame src="闭包函数.html" />
            
        </frameset>

    在进行编辑交互时需要在框架原代码块处添加代码

    <script>
                window.onload=function(){
                    document.body.onclick=f;
                }
                var f=function(){//改变第三个框架文档的背景色为红色
                    parent.frames[2].document.body.style.backgroundColor="red";
                }
            </script>

    三,定时器的使用

    主要为延时处理以及计时器,还有就是以一定时间间隔去执行某些代码块

    <body>
            <h1>标题君</h1>
            <p>段落文本</p>
            <input type="text" />
            <script>
                var p=document.getElementsByTagName("p")[0];
                p.onmouseover=function(i){
                    setTimeout(function(){
                        alert(p.tagName)
                    },500);
                }
            </script>
        </body>
        <!--为集合中每个元素都绑定一个事件延迟处理函数-->
        <script>
            var o=document.getElementsByTagName("body")[0].childNodes;//获取body元素下所有子元素
            for(var i=0;i<o.length;i++){//遍历元素集合
                o[i].onmouseover=function(i){//注册鼠标滑过事件
                    return function(){ //返回闭包函数
                        f(o[i])  //调用函数f,并传递当前对象引用
                    }
                }(i);//调用函数并传递循环序号,实现在闭包中存储对象序号值
            }
    //        for(var i=0;i<o.length;i++){
    //            o[i].onmousemove=function(i){
    //            return function(){
    //                clearTimeout(o[i].out)//清除已注册的延迟处理函数
    //            }
    //            }(i)
    //        }
            //定义f函数
            function f(o){
                var out=setTimeout(function(){
                    //alert(o.tagName);
                },500);     //显示当前元素名称
                o.out=setTimeout(function(){
                    //为了防止混淆多个注册的延迟处理函数,分别把不同元素的延迟处理函数的引用储存到该对象的out属性中
                    alert(o.tagName);
                },500);
            }
            var t=document.getElementsByTagName("input")[0];
            var i=1;
            function s(){
                var out=setTimeout(function(){
                    t.value=i++;
                    s();
                },1000);
                if(i>10){
                    clearTimeout(out);
                    alert("10秒")
                }
            }    //setTimeout()方法
            s();

    这里是一个延迟半秒后弹出鼠标所滑过的元素的元素标签名,以及一个简易的计时功能。

    三,navigator对象

    这个对象包含了浏览器的基本信息,可以通过此对象查询浏览器名称,版本,系统等

    这里是一个检测浏览器类型,版本号和window系统版本的代码块

    <script>
    			if(document.getElementsByName){
    				var a=document.getElementsByName("a");
    			}else if(document.getElementsByTagName){
    				var a=document.getElementsByTagName("a");
    			}
    			var s=window.navigator.userAgent;
    			alert(s);		  
    		</script>
    

    四,location对象

    此对象储存当前页面与位置(URL)相关信息,主要用途为跳转到指定界面

    五,screen对象

    存储客户端屏幕信息,在用于居中以及计算坐标时常用

    <script>
                var w=screen.availHeight;
                console.log(w);
                var n=screen.availWidth;
                console.log(n);
            </script>

    六,document对象

    在浏览器窗口中,每个window对象都会包含一个document属性,该属性引用窗口中显示HTML文档的document对象。

    <img name="img" src="../img/备1.jpg" />
            <form name="form" method="post" action="navigator.html"></form>
            <script>
                alert(document.img.src);
                alert(document.images[0].src);
                alert(document.images["img"].src);
            </script>

    这里为插入一个图片,然后以name属性,文本下标,文档对象集合三种方式来获得图片位置。

    利用open()可以给某个框架创建文档,也可以用write()方法来为其添加内容。在添加后需要用close()方法来结束创建过程。

    在接下来呢,就是关于文档节点的了

    首先,是元素添加

    <div id="box1"><p>beforebegin</p></div>
        <script>
            document.getElementById("box1").insertAdjacentHTML("beforebegin", "<h2>lalalalallalala</ h2>");//在当前元素之前插入一个同级元素
            document.getElementById("box1").insertAdjacentHTML("afterbegin", "<h2>qwq</ h2>");//在当前元素之下或者第一个元素之前插入一个新的元素(子元素)
            document.getElementById("box1").insertAdjacentHTML("beforeend", "<h2>0.0 0.0</ h2>");//当前元素之下,或第一个元素之后插入一个元素(子元素)
            document.getElementById("box1").insertAdjacentHTML("afterend", "<h2>略略略</ h2>");//在当前元素后插入一个同级元素
        </script>

    其次,outerHTML和innerHTML,outerText和innerText的区别

     <ul>
            <li>你好</li>
            <li>你叫什么?</li>
            <li>你干什么</li>
            <li>你喜欢JS么?</li>
        </ul>
        <script>
            var ul = document.getElementsByTagName("ul")[0];//获取列表结构
            var lis = ul.getElementsByTagName("li");//获取所有列表项
            lis[1].onclick = function () {//为第一个列表项绑定事件处理函数
                this.innerHTML = "<h2>我是一名初学者</h2>"; //替换HTML文本
            }
            lis[3].onclick = function () {
                this.outerHTML = "<h2>当然喜欢</h2>";//用HTML文本覆盖列表项标签及包含内容
            }
            function getInnerText(element){
                return (typeof element.textContent == "string") ? element.textContent : element.innerText;//接收一个元素作为参数,检查是否有textContent属性。如果没有,
                //就使用innerText
            }
            function setInnerText(element,text) {
                if (typeof element.textContent == "string") {
                    element.textContent = text;
                } else {
                    element.innerText = text;
                }
            }
            lis[0].onclick = function () {
                this.innerText = "谢谢";//替换文本
            }
            lis[2].onclick = function () {
                this.outerText = "我是学生";//覆盖列表标签及其包含内容
            }
        </script>

    最后,是一个添加项目的代码块

    每次使用js文件都会重新加载页面,可以使用遍历的方法减少刷新次数

    <input type="button" value="添加项目" onclick="addItems"/>
        <ul id="mylist"></ul>
        <script>
            function addItems() {
                var fragment = document.createDocumentFragment();
                var ul = document.getElementById("mylist");
                var li = null;
                for (var i = 0; i < 12; i++) {
                    li = document.createElement("li");
                    li.appendChild(document.createTextNode("项目" + (i + 1)));
                    fragment.appendChild(li);
                }
                ul.appendChild(fragment);
            }
        </script>
        <div id="box"> document.createAttribute(name)</div>
        <script>
            var element = document.getElementById("box");
            var attr = document.createAttribute("align");//创建一个属性节点
            attr.value = "center";//值为center
            element.setAttributeNode(attr);//把attr添加到元素中
            //访问属性(三种方式)
            alert(element.attributes["align"].value);
            alert(element.getAttributeNode("align").value);
            alert(element.getAttribute("align"));
    
        </script>
  • 相关阅读:
    NT头 IMAGE_NT_HEADER
    组合框
    列表框消息大全
    滚动条
    列表框
    超级列表框
    按钮
    EDIT编辑框
    15. 三数之和
    268. 缺失数字
  • 原文地址:https://www.cnblogs.com/wanghuanl/p/9293515.html
Copyright © 2011-2022 走看看