重读 JavaScript DOM 编程艺术(一)--DOM 的增编削查

在良久之前读过JavaScript Dom 编程艺术,如今重读又有新的体味,遂纪录下。

什么是DOM

关于这类英文缩写,首先看它的英文全拼–Document Object Model,即文档对象模子。DOM把一份文档示意为一棵树,这是明白DOM模子的症结。是由节点(node)组成的一棵节点树。

关于节点

DOM中有很多差别范例的节点。个中最主要的有三种:元素节点(element node)文本节点(text node)属性节点(attribute node)

元素节点

元素节点是DOM的原子,比方<body><p><ul>等。

元素能够包括其他元素。唯一没有被其他元素包括的元素是<html>元素,它是DOM的根元素。

文本节点

比方<p>it is a test</p>,“it is a test”就是一个文本节点。

文本节点老是包括在元素节点内部。

“it is a test”是<p>节点内的第一个子节点,所以p.nodeVAlue将是一个null值,应当写成p.childNode[0].nodeValue,才获得“it is a test”。

属性节点

比方<p title="hehe">it is a test</p>title="hehe"就是属性节点,用来对元素做出更详细的形貌。

属性老是被放在最先标签里,所以属性节点老是被包括在元素节点中。

DOM操纵

DOM操纵无非是增编削查,我们先看查和改。

getElementById

这个要领返回一个与谁人有着给定 id 属性值的节点对应的对象。

这是DOM 的一个要领。

getElementsByTagName

这个要领返回一个对象数组,每一个对象对应着这个标签的一个元素。

能够运用数组的length要领,document.getElementsByTagName("li").length

这是DOM 的一个要领。

getElementsByClassName

这是HTML5 DOM中新增的一个要领。吸收类名参数返回一个具有相同类名的元素的数组,一样能够运用数组要领length

只要较新的浏览器支撑这个要领,书里给出了代码能够本身为为老浏览器完成这个要领:

function getElementsByClassName(node, classname){
    if(node.getElementsByClassName){
        //运用现有要领
        return node.getElementsByClassName(classname);
    }else{
        var results = new Array();
        var elems = node.getElementsByTagName("*");
        for(var i=0; i<elems.length; i++){
            if(elems[i].className.indexOf(classname) != -1){
                results[results.length] = elems[i];
            }
        }
        return results;
    }
}

这个函数吸收两个参数。第一个node示意DOM树中的搜刮出发点,第二个classname就是要搜刮的类名了。

这是DOM 的一个要领。

getAttribute

这个要领只要一个参数–盘算查询的属性的名字。

这是DOM 的一个要领。而且是查询属性节点的要领。

setAttribute

这个要领吸收两个参数,第一个是要修正的属性名字,第二个是做出的修正的值。

object.setAttribute(attribute, value)

这是DOM 的一个要领。并且是修正属性节点的要领。

childNodes属性

childNodes 属性能够用来猎取任何一个元素的一切子元素,它是一个包括这个元素悉数子元素的数组,一样,它支撑length要领:

element.childNodes

nodeType属性

每一个节点都有 nodeType 属性。这个属性能够让我们晓得本身正在与哪种节点打交道。

node.nodeType

低劣的是 nodeType 的值并非笔墨,而是数字。

nodeType 属性总共有12种可取值,但个中唯一3种具有运用价值:

  • 元素节点 的 nodeType 属性值是1。

  • 属性节点 的 nodeType 属性值是2。

  • 文本节点 的 nodeType 属性值是3。

nodeValue 属性

假如想转变一个文本节点的值,那就是用 DOM 供应的 nodeValue 属性,它用来获得(和设置)一个节点的值:

node.nodeValue

firstChildlastChild 属性

node.firstChild

这类写法完整等价于:

node.childNodes[0]

而相对应的

node.lastChild

等价于:

node.childNodes[node.childNodes.length - 1]

末了

上面纪录了基础的 DOM 的的要领,以及一些 DOM 节点的属性,下一篇文章会纪录 DOM 的

    原文作者:MrDream
    原文地址: https://segmentfault.com/a/1190000004439123
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞