HTML DOM

简介


  • HTML DOM 定义了访问和操作 HTML 文档的标准方法。
  • DOM 将 HTML 文档表达为树结构
  • 作用:获取、修改、添加或删除 HTML 元素。
  • 实现功能:
  1. 贴吧的ul下面动态增加减少li的沙发动态的增加减少;
  2. 动态操作聊天功能;
  • 内容:节点:文档节点、文本节点(换行,文字)、注释节点、元素节点(标签) 节点的属性和方法: image

获取节点:

document是内存自动创建的,是dom的最底层的对象;

var obody = document.body;

通过childNodes获得所有的子节点对象,包括元素节点、属性节点、文本节点;

var nodearr = obody.childNodes;
        console.info(nodearr);
        console.info(nodearr.length);
        console.info(nodearr[i].nodeType);
        所有的标签都是元素节点,换行是文本节点,元素节点返回值是1   文本节点返回值是3  属性节点返回2
  • 获取子节点,不包括文本节点: children【获取所有子元素中的元素节点】
  • childnodes与children的区别:前面换行也计算在内;
var oul = document.getElementById("ul");
            var childArr = oul.children;
            for(var j=0;j<childArr.length;j++){
                console.info(childArr[j].nodeName)
            }
【兼容问题】firstChild在IE下获取到的第一个元素节点,DOM浏览器下面获取到的是第一个子节点;
【解决方案】:
     var node = oul.firstElementChild || oul.firstChild;
     console.info(node.nodeName);

获取节点其他方式:

获取到最后一个子节点
var oli = oul.lastElementChild;
            
获取到前一个兄弟节点:previousElementSibling;
var node2 = oul.previousElementSibling;

获取到后一个兄弟节点:nextElementSibling;
var node3 = oul.nextElementSibling;

获取到父节点:parentNote;
var oli1 = document.getElementById("li1");
var node4 = oli1.parentNode;

获取到定位父级:该父级必须设置postion,  offsetParset;
var odiv =document.getElementById("div3");
var node5 = odiv.offsetParent;

创建节点:

第一步:创建节点

var oli2 = document.createElement("li");
oli2.innerHTML = "韦德";     innerHTML :中间的值

第二步:将创建好的节点放入dom树中

oul.appendChild(oli2);	加入进去;
oul.insertBefore(oli2,oli1);  进行排序;


【细节】:获取li中的值,要首先得到li中的文本节点再获得值;nodevalue只针对文本节点;
oli2.firstChild.nodevalue;

操作案例:

创建聊天环境: 增加聊天记录删除功能:用a标签增加href的javaScript: innerHTML 为管理所有的div; 增加标签:op.appendChild(oa);

odiv.innerHTML = ""; 直接删除整个div的元素;

属性:attribute


得到某个元素的所有属性

特点:获取的属性跟元素设置的顺序相反;
    <div id="div1" style="width: 100px;height: 100px;background-color: #007bc5"  title=""></div>

    var odiv = document.getElementById("div1");
    var attrArr = odiv.attributes;

增加属性:

odiv.setAttribute("name","test");
    odiv.setAttribute("class","na");

删除属性:

odiv.removeAttribute("title");

获取指定的属性值:

方式1var str = odiv.getAttribute("style");
    console.info(str);
方式2console.info(odiv.style);
    该方法一定要有一个确定的标签元素
    修改设置这个属性值:
    odiv.style="width:200px;height:200px;background-color:red;";

文本节点textNode


主要功能:

修改li中的文字以前要直接删除li会把原来设置的样式一起删除了,要从新设置很麻烦

获取文本:

var textNode = document.createTextNode("杜兰特"); 添加的文本内容
var oli = document.getElementById("ul").firstElementChild;  添加对象;

增加操作

方式1:oli.appendChild(textNode)     添加内容
    oli.insertBefore(textNode,oli.firstChild);     插入在之前
appendChild  插入到节点中;


方式2:oli.firstChild.appendData("~\(≧▽≦)/~"); 
/*方式2默认将内容放在当前节点后面 即textNode后面*/
appendData  插入数据值;

增加文本到指定位置:

var oli2 = document.getElementById("ul").lastElementChild;
    oli2.firstChild.insertData(2,"mm");  
    第一个参数是位置,第二个参数内容*/

删除文本在指定位置:

oli2.firstChild.deleteData(2,0);                               /*第一个参数表示开始位置,第二个参数表示长度*/

替换文本在制定位置

oli2.firstChild.replaceData(0,2,"**");
/*第一个参数位置,第二个参数长度,第三个参数替换的内容*/

表格操作:


<table border="1" id="mytable">
    <tr>                tr行
        <th>名车</th>   th:第一列抬头
        <th>名人</th>
        <th>球星</th>
    </tr>
    <tr>
        <td>保时捷</td> td:列
        <td>王力宏</td>
        <td>韦德</td>
    </tr>
</table>

获得对象:

var otable = document.getElementById("mytable");

增加行:insertRow(2); 增加第三行

var otr = otable.insertRow(2);

增加td:old = insertCell(0);增加第三行第一列;

var otd1 = otr.insertCell(0);
    var nodeText = document.createTextNode("法拉利");
    otd1.appendChild(nodeText);
    
    var otd2 = otr.insertCell(1);
    var nodeText2 = document.createTextNode("高圆圆");
    otd2.appendChild(nodeText2);

     var otd3 = otr.insertCell(2);
    var nodeText3 = document.createTextNode("罗纳尔多");
    otd3.appendChild(nodeText3);

删除行列:

otable.deleteRow(1);
    otr.deleteCell(0);
访问表格:

获取所有的行;

var ro = otable.rows;
    console.info(ro);
    
    otable.children//传统方法;

循环遍历行

for(var i=0;i<otable.rows.length;i=i+2){
    otable.rows[i].style.backgroundColor = "red";

获取所有列:在所有行中遍历找到所想要的列;

for(var i=0;i<otable.rows.length;i=i+2){
        otable.rows[i].style.backgroundColor = "red";
        for(var j=0;j<otable.rows[i].cells.length;j=j+2){
            otable.rows[i].cells[j].style.backgroundColor = "orange";
        }
    }

补充


<ul id="ul">
        <li class="li1">韦德</li>
        <li>科比</li>
        <li>杜兰特</li>
    </ul>
    <input type="text" name="username"/>
节点替换:replaceChild
var oli = document.createElement("li");
    var textNode = document.createTextNode("詹姆斯");
     oli.appendChild(textNode);
       /*替换节点,杜兰特*/
        var oul = document.getElementById("ul");
        var lastLi = oul.lastElementChild;
        /*第一个参数 要替换的li内容,第二个参数是目标li*/
        oul.replaceChild(oli,lastLi);
克隆节点:cloneNode(true);

//ture为深克隆, false为浅克隆

var newli = oli.cloneNode(false);
oul.appendChild(newli);
JS的节点选择器
/*通过class找到节点*/
        var oli1 = document.getElementsByClassName("li1");
        console.info(oli1);
        oli1[0].style.backgroundColor = "pink";

        /*通过name属性找元素*/
        var oinp = document.getElementsByName("username");
        console.info(oinp)
        oinp[0].style.backgroundColor = "green";


        /*通过元素找节点*/
        var ularr = document.getElementsByTagName("ul");
单选框设置勾选状态:

是否被选中:checked = “checked”;

<input type="checkbox" checked="checked"/>

全部选中

var inparr = document.getElementsByTagName("input");
        for(var i=0;i<inparr.length;i++){
            inparr[i].checked =true;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值