• Web前端开发与设计08-JavaScript操作DOM对象


    学习要点

    • DOM分类
    • DOM节点间关系
    • 访问DOM节点
    • 节点的创建、添加、删除、替换
    • 设置元素的样式
    • 获取节点位置属性

    DOM模型

    DOM定义

    • DOM Core:W3C针对XML文档的操作规范。适用于XML和HTML。
    • HTML-DOM:W3C针对HTML文档的操作规范。只适用于HTML。
    • CSS-DOM:操作CSS的DOM,把style属性封装成对象进行操作。

     

    DOM结构

    节点间的关系主要有:根节点、父节点、子节点、节点属性、节点value值和节点文本内容。

    访问节点

    getElement方法

    • getElementById()
    • getElementsByName()
    • getElementsByTagName()

    根据层次关系访问节点

    1、节点属性

    注意:使用以上属性,html文档中的换行会被当成空格处理,空格也被当成节点对象(文本节点);大于等于一个空格都被当成一个文本节点对象。

    示例代码:

    <section id="news">
    <header>京东快报<a href="#">更多 > </a></header>
    <ul>
        <li><a href="#">志玲姐姐:墨镜300减30</a></li>
        <li><a href="#">京东无锡馆正式启动</a></li>
        <li><a href="#">99元抢平板!品牌配件199-100</a></li>
        <li><a href="#">节能领跑京东先行</a></li>
        <li><a href="#">高洁丝实力撩货,领券五折</a></li>
    </ul>
    </section>
    <script type="text/javascript">
     var obj = document.getElementById("news");
     var str = obj.firstChild.nextSibling.innerHTML;
     alert(str);
    </script>
    

      

    2、element属性

     

     注意:element只获取节点对像,忽略文本节点对象。

    示例代码:

    <section id="news">
    <header>京东快报<a href="#">更多 > </a></header>
    <ul>
        <li><a href="#">志玲姐姐:墨镜300减30</a></li>
        <li><a href="#">京东无锡馆正式启动</a></li>
        <li><a href="#">99元抢平板!品牌配件199-100</a></li>
        <li><a href="#">节能领跑京东先行</a></li>
        <li><a href="#">高洁丝实力撩货,领券五折</a></li>
    </ul>
    </section>
    <script type="text/javascript">
     var obj = document.getElementById("news");
    	var str = obj.lastElementChild.firstElementChild.innerHTML 
    			|| obj.lastChild.firstChild.innerHTML;
     alert(str);
    </script>
    

      

    解释:“||”逻辑或运算符。实际项目写法,确保浏览器兼容性和正确读取参数。

    • 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
    • 只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

    节点信息

    1、常用节点信息

    • nodeName:节点名称
    • nodeValue:节点值
    • nodeType:节点类型

    2、节点类型和值对应表

     3、示例代码

    <ul id="nodeList">
    <li>nodeName</li>
    <li>nodeValue</li>
    <li>nodeType</li>
    </ul>
    <p></p>
    <script>
        var nodes=document.getElementById("nodeList");
        var type1=nodes.firstChild.nodeType;//元素1
        var type2=nodes.firstChild.firstChild.nodeType;//文本3
        var name1=nodes.firstChild.firstChild.nodeName;//节点名称:文本
        var str=nodes.firstChild.firstChild.nodeValue;//nodename
    var con="type1:"+type1+"<br/>type2:"+type2+"<br/>name1:"+
    name1+"<br/>str:"+str;
        document.getElementById("nodeList").nextSibling.innerHTML=con;    
    </script>
    

      

    操作节点

    节点的主要操作

    操作节点的属性

    语法:

    getAttribute("属性名")

    setAttribute("属性名","属性值")

    示例代码:

    <body>
    <p>选择你喜欢的书:
        <input type="radio" name="book" onclick="book()">我和狗狗一起活下来 
        <input type="radio" name="book" onclick="book()">灰霾来了怎么办
    </p>
    <div>
    <img src="" alt="" id="image" onclick="img()">
    <span></span>
    </div>
    <script>
        function book() {
            var ele = document.getElementsByName("book");
            var img = document.getElementById("image");
            if (ele[0].checked) {
                img.setAttribute("src", "images/dog.jpg");
                img.setAttribute("alt", "我和狗狗一起活下来");
                img.nextSibling.innerHTML = "我和狗狗一起活下来";
            }
            else if (ele[1].checked) {
                img.setAttribute("src", "images/mai.jpg");
                img.setAttribute("alt", "灰霾来了怎么办");
                img.nextSibling.innerHTML = "灰霾来了怎么办";
            }
        }
        function img() {
       var alt = document.getElementById("image").getAttribute("alt");
            alert("图片的alt:" + alt)
        }
    </script>
    </body>
    

      

    创建和插入节点

    1、常用方法:

    2、示例代码:

    <p>选择你喜欢的书:
    <input type="radio" name="book" onclick="book()">我和狗狗一起活下来
    <input type="radio" name="book" onclick="book()">灰霾来了怎么办
    </p>
    <div></div>
    <script>
    function book() {
        var ele = document.getElementsByName("book");
        var bName = document.getElementsByTagName("div")[0];
        if (ele[0].checked) {
            var img = document.createElement("img");
            img.setAttribute("src", "images/dog.jpg");
            img.setAttribute("alt", "我和狗狗一起活下来");
            bName.appendChild(img);
    }
        else if (ele[1].checked) {
                var img = document.createElement("img");
                img.setAttribute("src", "images/mai.jpg");
                img.setAttribute("alt", "灰霾来了怎么办");
                img.setAttribute("onclick", "copyNode()")
                bName.appendChild(img);
            }
        }
        function copyNode() {
            var bName = document.getElementsByTagName("div")[0];
            var copy = bName.lastChild.cloneNode(false);
            bName.insertBefore(copy, bName.firstChild);
        }
    </script>
    

      

    3、如何复制节点的事件?

    使用javascript复制节点的事件需要重新注册事件监听,过程繁琐,并存在浏览器兼容性问题,建议使用jquery的colone()方法,jQuery后面详细讲解。示例代码:

    <script src="script/jquery-1.12.4.js" type="text/javascript"></script>
    <script>
        $(function () {
            $("button").click(function () {
                $(this).clone(true).insertAfter(this);
            });
        });
    </script>
    <button onclick="alert('click me')">按钮克隆</button>
    

      

    删除和替换节点

    1、常用方法

    2、示例代码

    <body>
        <ul>
            <li>
                <img src="images/f01.jpg" id="first">
                <p><input type="button" value="删除我吧" onclick="del()"></p>
            </li>
            <li>
                <img src="images/f02.jpg" id="second">
                <p><input type="button" value="换换我吧" onclick="rep()"></p>
            </li>
        </ul>
    <script>
        function del(){
            var delNode=document.getElementById("first");
            delNode.parentNode.removeChild(delNode);
        }
        function rep(){
            var oldNode=document.getElementById("second");
            var newNode=document.createElement("img");
            newNode.setAttribute("src","images/f03.jpg");
            oldNode.parentNode.replaceChild(newNode,oldNode);
        }
    </script>
    

      

    操作节点样式

    1、应用案例

    示例:实现鼠标移至“我的购物车”显示商品内容。

    2、原理

    改变网页元素样式的属性:style属性和className属性。

    3、sytle属性
    3.1  语法格式
    HTML元素.style.样式属性="值"
    示例代码

    document.getElementById("titles").style.color="#ff0000"; 
    document.getElementById("titles").style.fontSize="25px ";
    

      

    3.2  常用事件

     3.3  示例代码

    function over(){
            document.getElementById("cart").style.backgroundColor="#ffffff";
            document.getElementById("cart").style.zIndex="100";
            document.getElementById("cart").style.borderBottom="none";
            document.getElementById("cartList").style.display="block";
            document.getElementById("cartList").style.position="relative";
            document.getElementById("cartList").style.top="-1px";
    }
    function out(){
       document.getElementById("cart").style.backgroundColor="#f9f9f9";
       document.getElementById("cart").style.borderBottom="solid 1px #dcdcdc";
       document.getElementById("cartList").style.display="none";
    }
    

      

    4、className属性

     4.1  语法格式

    HTML元素.className="样式名称"

    4.2  示例代码

    function over(){
    document.getElementById("cart").className="cartOver";
    document.getElementById("cartList").className="cartListOver";
    }
    function out(){
    document.getElementById("cart").className="cartOut";
    document.getElementById("cartList").className="cartListOut";
    

      

    获取元素样式

    1、方式一:style方式
    语法格式
    HTML元素.style.样式属性;
    示例代码

    alert(document.getElementById("cartList").display);
    

      

    2、方式二:getComputedStyle
    语法格式
    document.defaultView.getComputedStyle(元素,null).属性;
    第二个参数:伪类选择,如果元素不是伪类,设置为null
    示例代码

    var cartList=document.getElementById("cartList");
    alert(document.defaultView.getComputedStyle(cartList,null).display);
    

      

    3、方式三:currentStyle(兼容IE)
    语法格式
    HTML元素. currentStyle.样式属性;
    示例代码

    alert(document.getElementById("cartList").currentStyle.display);
    

      

    获取元素的位置

    应用场景

    如何实现网页固定位置菜单或者广告?

    实现方式:position样式属性或者通过HTML元素位置属性进行设置。

    元素位置相关属性

    • 标准浏览器
    document.documentElement.scrollTop;
    document.documentElement.scrollLeft;
    

      

    • Chrome
    document.body.scrollTop;
    document.body.scrollLeft;
    

      

    • 兼容方式
    var sTop=document.documentElement.scrollTop||document.body.scrollTop;
    

      

    随鼠标滚动的广告图片

    var adverTop; //层距页面顶端距离
    	var adverLeft;
    	var adverObj; //层对象
    	function inix(){
    		adverObj=document.getElementById("adver"); //获得层对象
    		if(adverObj.currentStyle){//IE
    			adverTop=parseInt(adverObj.currentStyle.top);
    			adverLeft=parseInt(adverObj.currentStyle.left);
    		}
    		else{//Chrome
    			adverTop=parseInt(document.defaultView.getComputedStyle(adverObj,null).top);
    			adverLeft=parseInt(document.defaultView.getComputedStyle(adverObj,null).left);
    		}
    
    	}
    	function move(){
            var sTop=parseInt(document.documentElement.scrollTop||document.body.scrollTop);
            var sLeft=parseInt(document.documentElement.scrollLeft||document.body.scrollLeft);
    		adverObj.style.top=adverTop+sTop+"px";
    		adverObj.style.left=adverLeft+sLeft+"px";
    	}
    	window.onload=inix;
    	window.onscroll=move;
    

      

  • 相关阅读:
    Servlet的建立以及配置使用
    maven 安装 及其 创建
    错误总结
    使用分层实现业务处理
    JSP数据交互(三)
    JSP数据交互(二)
    JSP数据交互(一)
    动态网页开发基础
    记录mysql编码问题
    .net core 2.0 升级 2.1 访问mysql出现bug解决
  • 原文地址:https://www.cnblogs.com/rask/p/12398930.html
Copyright © 2020-2023  润新知