DOM操作

文档对象模型DOM(Document Object Model),是W3C组织推荐的处理可扩展标记语言的标准编程接口。

一、获取节点

加载HTML页面的时候,web浏览器就会生成一个树形结构,用来表示页面内部结构,称之为DOM树,DOM将这种树型结构理解为由节点组成。

  1. 节点的基本属性:

    • 节点.nodeType属性,用于表面节点的类型。节点类型用数值常量来表示,标签为1,属性为2,文本为3等。
    • 节点.nodeName: 获取标签节点的标签名。
    • 节点.nodeValue: 获取文本节点的内容
  2. 获取父节点:
    子节点.parentNode: 属性指向父节点。
    子节点.offsetParent: 指向与当前元素最近的定位父元素,没有定位父级,则指向body。

  3. 获取子节点

    父节点.children;返回保存子元素的集合,是一个HTMLCollection对象(IE6-IE8完全支持children属性,但返回中包括元素,非标准模式)
    父节点.childNodes;返回保存着一个NodeList对象,是一个类数组对象(对于元素间的空格,IE9及之前版本不会返回文本节点)

  4. 获取父元素的首尾节点

    父元素.firstChilnd:获取第一个子元素ie可以正常使用,标准浏览器会获取到折行文本。
    父元素.firstElementChild:获取第一个子元素,解决折行问题;
    父元素.lastChild:获取最后一个子元素ie正常使用,标准浏览器会获取折行文本
    父元素.lastElementChild:获取最后一个子元素,标准浏览器专用;

  5. 获取下一个兄弟元素

    父元素.nextSibling: 获取下一个兄弟元素(标准浏览器会识别折行文本);
    父元素.nextElementSibling: 获取下一个兄弟元素,标准浏览器专用;

  6. 获取上一个兄弟元素

    父元素.previousSibling: 获取上一个兄弟元素(标准浏览器会识别折行文本);
    父元素.previousElementSibling:获取上一个兄弟元素,标准浏览器专用;

    <body>
        <ul>
            <li>我是li1</li>
            <li>我是li2</li>
            <li>我是li3</li>
            <li>我是li4</li>
        </ul>
        <script>
            // 获取父元素
            var ul = document.querySelector('ul');
            // 获取第一个子元素 同时兼容IE低版本
            var liOne = ul.firstElementChild || ul.firstChild;
            console.log(liOne.innerHTML);   // 我是li1
    
            // 获取最后一个子元素 同时兼容IE低版本
            var liLast = ul.lastElementChild || ul.lastChild;
            console.log(liLast.innerHTML);   // 我是li4
    
            // 获取第二个子元素 
            var liTwo = liOne.nextElementSibling || liOne.nextSibling;
            console.log(liTwo.innerHTML);   // 我是li2
    
            // 获取倒数第二个子元素
            var lastTwo = liLast.previousElementSibling || liLast.previousSibling;
            console.log(lastTwo.innerHTML);   // 我是li3
    
        </script>
    

二、操作节点

  1. 创建节点
    document.createElement(‘创建的标签名’); 返回一个标签对象的应用;
    document.createTextNode(‘文本’); 保存一个文本,传入标签对象中去;
  2. 在父元素的末尾添加元素
    父元素.appendChild(要添加的子元素); 在父元素的末尾添加这样一个子元素;
  3. 删除节点
    父元素.removeChild(被删除的子元素);在父元素中删除参数中的子元素;
    父元素.remove(); 这个方法还会把父元素本身给删除;
  4. 替换节点
    父元素.replaceChild(新的节点,被替换的节点); 两个参数分别是要插入的节点和要被替换的节点。
  5. 赋值节点
    被复制的元素.cloneNode(Boolean); 参数传入一个Boolean值,如果为true表示复制标签和内容,默认为false,只赋值标签,不复制内容;
  6. 插入节点
    父元素.insetBefore(要插入的节点,被插队的节点); 要插入的节点会插入到被插队的节点前面。(新节点是之前创建好已经在父元素中时,会替换位置而已);
<ul>
        <li>我是li1</li>
        <li>我是li2</li>
        <li>我是li3</li>
        <li>我是li4</li>
    </ul>
    <script>
        // 获取父元素
        var ul = document.querySelector('ul');
        // 创建li节点
        var createLi = document.createElement('li');
        // 创建li里面的文本
        var text = document.createTextNode('我是新添加的li');
        // 将文本添加进li中
        createLi.appendChild(text);
        // 最后在页面中呈现出来
        ul.appendChild(createLi);
        console.log(ul.children.length);    // 5
        // 在第一个子元素前面插入元素
        ul.insertBefore(createLi,ul.firstElementChild);     // 本来在添加在最后一项li跑到了第一项
        // 删除最后与一个子元素
        ul.removeChild(ul.lastElementChild);    // 我是li4被删除
        // 替换节点  把现在的最后一个li替换成第一个
        ul.replaceChild(ul.lastElementChild, createLi); // 现在就变为 (我是li3 我是li1 我是li2)
        // 复制创建的节点
        var cloneLi = createLi.cloneNode(true);
        console.log(cloneLi);       // <li>我是新添加的li</li>

    </script>

三、获取元素

  1. document.getElementById(ID名); 通过id名获取元素,id具有唯一性(不获取也能直接使用,但是不建议直接使用);
  2. document.getElementsByTagNage(标签名); 通过标签名获取元素(获取的一个元素集合);
  3. document.getElementsByClassName(类名);通过class类名获取元素(获取的是满足条件的元素集合);
  4. document.querySelector(css选择符); 接受一个css选择符,选择满足条件的第一个元素;
  5. document.querySelectorAll(css选择符); 选择满足条件的所有元素组成的集合。

四、获取和操作属性值

  • 设置属性值: 元素.setAttribute(‘属性名’,‘属性值’);
  • 获取属性值: 元素.getAttribute(‘属性名’);
    以上设置属性值与获取属性值的方法与自定义属性不同点在于:自定义属性在页面结构是看不见的,而setAttribute()方法设置的属性在页面结构中可以看到,再者set方法设置的属性值是元素打点获取不到的,get方法可以获取到。

五、表格操作

  1. 首先获取表格table对象(tObj);
  2. 获取表头元素:tObj.tHead;
  3. 获取主体:tObj.tBoodies[0];
  4. 获取页尾: tObj.tFoot;
  5. 获取行: tObj.rows;
  6. 获取列:tObj.cells;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒羊羊我小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值