JavaScript操作DOM对象


DOMDocument Object Model(文档对象模型),即文档对象模型,是基于文档编程的一套API接口。

使用JavaScript操作DOM时分为三个方面:DOMCore(核心)、HTML-DOMCSS-DOM

1DOM Core

DOM Core不是JavaScript的专属品,任何一种支持DOM的编程语言都可以使用它,它的用途仅限于处理一种使用标记语言编写出来的文档。

2HTML-DOM

使用JavaScriptDOMHTML文档编写脚本时,有许多专属的HTML-DOM属性,HTML-DOM出现的比DOM Core更早,它提供了一些更简单的标记来描述各种HTML元素的属性。

3CSS-DOM

CSS-DOM是针对CSS的操作,在JavaScript中,CSS-DOM技术的主要作用是获取和设置style对象的各种属性。

 

 

节点和节点关系

HTML文档中每个标签或元素都是一个节点,在DOM中是这样规定的。

a)整个文档是一个文档节点

b)每个HTML标签是一个元素节点

c)包含在HTML元素中的文本是文本节点

d)每个HTML属性是一个属性节点

e)注释属于注释节点

访问节点

 

使用DOM Core访问HTML文档的节点主要有两种方式,一种是使用getElement系列方法访问指定节点,另外一种是根据节点的层次关系访问节点。

1、使用getElement系列方法访问指定节点

getElementById()getElementsByName()getElementsByTagName()

2

节点属性

属性名称

描述

parentNode

返回节点的父节点

childNodes

返回子节点集合,childNodes[i]

firstChild

返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点

lastChild

返回节点的最后一个子节点

nextSibling

下一个节点

previousSibling

上一个节点

例如:

<body>

<section id="news"><header>京东快报<a href="#">更多 > </a></header><ul>

    <li><a href="#">志玲姐姐:墨镜300减30</a></li><li><a href="#">京东无锡馆正式启动</a></li><li><ahref="#">99元抢平板!品牌配件199-100</a></li><li><a href="#">节能领跑京东先行</a></li><li><a href="#">高洁丝实力撩货,领券五折</a></li></ul></section>

<script>

    var obj=document.getElementById("news");

   // var str=obj.lastChild.firstChild.nextSibling.nextSibling.innerHTML;//返回<a href="#">京东无锡馆正式启动</a>

   // var str=obj.lastChild.lastChild.previousSibling.previousSibling.innerHTML;//返回<a href="#">99元抢平板!品牌配件199-100</a>

    var str=obj.lastElementChild.firstElementChild.innerHTML||obj.lastChild.firstChild.innerHTML;//返回<a href="#">志玲姐姐:墨镜300减30</a>

    alert(str);

</script>

</body>

注:

如果在li标签前增加一个空行,则实现效果也包括空行。。。

JavaScript中提供了一组可兼容不同浏览器的Element属性,可以消除空行或换行等出现的无法准确访问到节点的情况

element属性

属性名称

描述

firstElementChild

返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点

lastElementChild

返回节点的最后一个子节点

nextElementSibling

下一个节点

previousElementSibling

上一个节点

 

需要获取不同的节点时,使用节点属性和element属性的写法如下:

oNext = oParent.nextElementSibling || oParent.nextSibling   //获取下一个节点

oPre = oParent.previousElementSibling || oParent.previousSibling  //获取上一个节点

oFirst = oParent. firstElementChild  ||  oParent.firstChild   //获取第一个节点

oLast = oParent.lastElementChild || oParent.lastChild      //获取最后一个节点

节点信息

 

节点是DOM层次结构中的任何类型的对象的通用名称,每个节点都拥有包含着关于节点某些信息的属性。

nodeName:节点名称

nodeValue:节点值

nodeType:节点类型

nodeName属性包含某个节点的名称,元素节点的nodeName是标签名称,属性节点的nodeName是属性名称,文本节点的nodeName永远是#text,文档节点的nodeName永远是#document

nodeValue节点值,对于文本节点,nodeValue属性包含文本;对于属性节点,nodeValue属性包含属性值;nodeValue属性对于文档节点和元素节点是不可用的。

nodeType属性可返回节点的类型,是一个只读属性

节点类型

节点类型

NodeType

元素element

1

属性attr 

2

文本text

3

注释comments

8

文档document

9

 

 

操作节点

 

操作节点的属性

语法:

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>

注:当使用getAttribute()方法读取属性值时,如果属性不存在,则getAttribute返回null

创建和插入节点

使用JavaScript操作DOM有很多方法可以创建或增加一个新节点

创建节点

名称

描述

createElement( tagName)

创建一个标签名为tagName的新元素节点

A.appendChild( B)

把B节点追加至A节点的末尾

insertBefore( A,B )

把A节点插入到B节点之前

cloneNode(deep)

复制某个指定的节点

注:

insertBefore( A,B )中有两个参数。A是必选项,表示新插入的节点;B是可选项,表示新节点被插入B节点的前面

cloneNode(deep)中的参数deep为布尔值,若deep值为true,则复制该节点及该节点的所有子节点,若deep值为false,则只复制该节点和其属性。

删除和替换节点

 

删除和替换节点的方法

名称

描述

removeChild( node)

删除指定的节点

replaceChild( newNode, oldNode)属性attr 

用其他的节点替换指定的节点

方法replaceChild( newNode, oldNode)中的两个参数,newNode是替换的新节点,oldNode是要被替换的节点。

例如:

<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>
<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>
</body>

操作节点的样式

1style属性

HTML DOM中,style是一个对象,代表一个单独的样式声明,可通过应用样式的文档或元素访问style对象。

语法:

HTML元素.style.样式属性=""

例如:

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

JavaScript中“-”表示减号,如果样式属性名称中带有“-”号,则要省去“-”,并且“-”后的首字母要大写。

常用事件

名称

描述

onclick

当用户单击某个对象时调用事件

onmouseover

鼠标移到某元素之上

onmouseout

鼠标从某元素移开

onmousedown

鼠标按钮被按下

例如:

<body>
<section id="shopping">
    <div id="cart" onmouseover="over()" onmouseout="out()">我的购物车<span>1</span></div>
    <div id="cartList">
        <h2>最新加入的商品</h2>
        <ul>
            <li><img src="images/makeup.jpg"></li>
            <li>倩碧经典三部曲套装(液体皂200ml+明肌2号水200ml+润肤乳125ml)</li>
            <li>¥558.00×1<br/>删除</li>
        </ul>
        <div class="footer">共1件商品<span>共计¥558.00</span> <span>去购物车</span></div>
    </div>
</section>
<script>
    document.getElementById("cartList").style.display="none";
    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";
    }
</script>
</body>

2className属性

HTML DOM中,calssName属性可设置或返回元素的calss样式

语法:

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

修改上一个示例:

<body>

<section id="shopping">
    <div id="cart" onmouseover="over()" onmouseout="out()">我的购物车<span>1</span></div>
    <div id="cartList">
        <h2>最新加入的商品</h2>
        <ul>
            <li><img src="images/makeup.jpg"></li>
            <li>倩碧经典三部曲套装(液体皂200ml+明肌2号水200ml+润肤乳125ml)</li>
           <li>¥558.00×1<br/>删除</li>
        </ul>
        <div class="footer">共1件商品<span>共计¥558.00</span> <span>去购物车</span></div>
    </div>
</section>
<script>
    function over(){
     document.getElementById("cart").className="cartOver";
     document.getElementById("cartList").className="cartListOver";
     }
     function out(){
     document.getElementById("cart").className="cartOut";
     document.getElementById("cartList").className="cartListOut";
     }
</script>
</body>

 

获取元素的样式

 

JavaScript中可以使用style属性获取样式的属性值

语法:

HTML元素.style.样式属性;

例如:

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


注:在JavaScript中,使用“HTML元素.style.样式属性;”的方式只能获取内联样式的属性值,无法获取内部样式表或外部样式表的属性值。

微软为每个元素提供了一个currentStyle对象,它包含了所有元素的style对象的特性和任何未被覆盖的CSS规则的style特性。

语法:

document.defaultView.getComputedStyle(元素,null).属性;

例如:

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

兼容IE浏览器的方法

语法:

HTML元素. currentStyle.样式属性;

例如:

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

获取元素位置

可以获取滚动状态下元素的一些属性

HTML中元素的属性

属性

描述

offsetLeft 

返回当前元素左边界到它上级元素的左边界的距离,只读属性

offsetTop

返回当前元素上边界到它上级元素的上边界的距离,只读属性

offsetHeight

返回元素的高度

offsetWidth

返回元素的宽度

offsetParent

返回元素的偏移容器,即对最近的动态定位的包含元素的引用

scrollTop

返回匹配元素的滚动条的垂直位置

scrollLeft

返回匹配元素的滚动条的水平位置

clientWidth

返回元素的可见宽度

clientHeight

返回元素的可见高度

scrollTop和scrollLeft这两个属性,获得的数值单位是像素(px),对于不滚动的元素,这两个属性值总是0,这两个属性获取滚动条在窗口中滚动的距离。

语法:

document.documentElement.scrollTop;
document.documentElement.scrollLeft;
或者
document.body.scrollTop;
document.body.scrollLeft;

例如:

var sTop=document.documentElement.scrollTop||document.body.scrollTop;

猜你喜欢

转载自blog.csdn.net/weixin_40544803/article/details/79988316