js--DOM

1.DOM的作用

DOM是针对HTML和XML文档的API,允许开发人员添加,移除和修改页面的某一部分。DOM为web文档创建带有层级的结果,这些层级是通过node节点组成

2.Node接口–12种节点

DOM1级定义了一个 Node接口 ,该接口将DOM中的所有节点类型实现,总共有12种节点。

常用的有元素节点,属性节点,文本节点,注释节点,文档节点

ELEMENT_NODE(1),ATTRIBUTE_NODE(2),TEXT_NODE(3),COMMENT_NODE(8),DOCUMENT_NODE(9)

判断节点类型

// 在ie种无效,因为ie没有公开NODE的构造函数
if(someNode.nodeType == NODE.ELEMENT_NODE) {

}

//一般通用,在ie中也有效
if(someNode.nodeType == 1) {

}

3.node类型的属性和方法

someNode.nodeType
someNode.nodeName
someNode.nodeValue
someNode.childNodes----保存着NodeList对象,可以用someNode.childNodes[0]或者someNode.childNodes.item(0)两种方式访问(可用以下方法来转换成数组)
someNode.firstChild
someNode.lastChild
someNode.parentNode
someNode.nextSibling
someNode.previousSibling

4.node类型–Document类型

Document类型表示文档。document对象是Document的一个实例,表示整个HTML页面。document对象是window对象的一个属性,可以作为全局对象来访问。

document对象的属性和方法

document.nodeType--9
document.nodeName--"#document"
document.nodeValue--null
document.parentNode--null

<!-- 所有浏览器访问html和body通用的方法是document.documentElement和document.body -->
html == document.documentElement---一般不用document.childNodes[0]或者document.firstChild因为前边可能有注释节点
body == document.body

<!-- 文档信息 -->
document.title

<!-- 和网页请求相关的属性 -->
document.URL--页面完整的URL
document.domain--页面的域名
document.referrer--保存着链接到当前页面的那个页面的URL

<!-- 查找元素 -->
document.getElementById("someId");
var images = document.getElementsByTagName("img");
images[0]---其实就是在后台调用images.item(0)
images["myImage"]--其实就是在后台调用images.namedItem("myImage");

5.node类型–Element类型

element对象的属性和方法,注意attributes这个属性

element.nodeType--1
element.nodeName--元素的标签名
element.nodeValue--null
element.parentNode--Document或Element
<!-- 访问设置元素的属性 -->
element.getAttribute();
element.setAttribute();
element.removeAttribute();
element.attributes--也是一个类似nodeList

遍历元素的所有属性element.attributes

function outputAttributes(element) {
    var pairs = new Array(),
        attrName,
        attrValue,
        len,
        i;

    for(i = 0,len = element.attributes.length;i < len;i++) {
        attrName = element.attributes[i].nodeName;
        attrValue = element.attributes[i].nodeValue;
        <!-- 加上此判断语句是为了防止IE7以更早的版本中会返回所有可能的属性,而不是只返回被指定的特性 -->
        if(element.attributes[i].specified) {
            pairs.push(attrName + "=\"" + attrValue + "\"");
        }
    }
    return pairs.join(" ");
}

元素的子节点(li标签之间有空白是如何形成的)

<!-- IE解析成3个子节点,但是其他浏览器解析成7个节点(3个li元素节点和4个空白文本节点) -->
<ul id="myList">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>

所以要想遍历li标签的方法如下两种:

1.childNodes节点遍历

var ulList = document.getElementById("myList");

for(var i = 0 ,len = ulList.childNodes.length;i < len;i++) {
    <!-- 确保是li子节点 -->
    if(ulList.childNodes[i].nodeType == 1) {
        // do something
    }
}

2.直接使用getElementsByTagName

var ulList = document.getElementById("myList");
var items = ulList.getElementsByTagName("li");

3.使用专门的元素遍历方法(dom扩展中),这样就不用担心空白的文本节点了

DOM扩展的元素遍历的属性:

childElementCount

firstElementChild

lastElementChild

previousElementSibling

nextElementSibling

var ulList = document.getElementById("myList"),
    child = ulList.firstElementChild;

for(var i = 0 ,len = ulList.childElementCount;i < len;i++) {
    if(child != ulList.firstElementChild) {
        child = child.nextElementSibling;
    }
}

6.node类型–Attr类型–不常用

attr对象的属性和方法–虽然也是节点,但不被人为是DOM文档树的一部分

attrNode.nodeType--2
attrNode.nodeName--特性的名称
attrNode.nodeValue--特性的值
attrNode.parentNode--null

一般我们都用元素的getAttribute(),setAttribute(),removeAttribute(),很少直接引用特性节点
Attr对象3个属性name特性名称,value特性的值,specified代码中是否注定此特性,是布尔值

访问特性的三个方法

var attr = document.createAttribute("align");
attr.value = "left";
element.setAttributeNode(attr);--为元素添加特性
<!-- 访问特性的三种方法
1.getAttribute()只返回特性的值
2.getAttributeNode()返回特性节点
3.attributes也是返回特性节点
 -->
element.attributes["align"].value;--left
element.getAttribute("align");--left
element.getAttributeNode("align").value;--left

7.node类型–Text类型

text对象的属性和方法

textNode.nodeType--3
textNode.nodeName--"#text"
textNode.nodeValue--节点所包含的文本
textNode.parentNode--是一个element

<!-- 无文本节点 -->
<div></div>
<!-- 有空格,有一个文本节点 -->
<div> </div>
<!-- 有内容,有一个文本节点 -->
<div>hello world!</div>

<!-- 规范化文本节点normalize()和分割文本节点splitText() -->
在一个包含两个或者多个文本节点的父元素调用normalize方法

创建文本节点document.createTextNode()

var element = document.createElement("div");
element.className = "message";

var textNode = document.createTextNode("Hello world!");
element.appendChild(textNode);

document.body.appendChild(element);

8.node类型–Comment类型
comment对象的属性和方法

commentNode.nodeType--8
commentNode.nodeName--"#comment"
commentNode.nodeValue--注释的内容
commentNode.parentNode--可能是Document或Element

9.node类型–DocumentFragment类型
DocumentFragment对象的属性和方法

documentFragmentNode.nodeType--11
documentFragmentNode.nodeName--"#document-fragment"
documentFragmentNode.nodeValue--null
documentFragmentNode.parentNode--null

documentFragment是一种轻量级的文档,是文档片段,文档片段不能直接添加到文档中,但是可以作为一个仓库来使用,可以在里面保存将来可能会添加到文档中的节点。

var fragment = document.createDocumentFragment();
var ul = document.getElementById("myList");
var li = null;

for(var i = 0;i < 3;i++) {
    li = document.createElement("li");
    li.appendChild(document.createTextNode("Item" + (i+1)));
    fragment.appendChild(li);
}

ul.appendChild(fragment);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值