js中的DOM

来源:互联网 发布:python博客 编辑:程序博客网 时间:2024/06/07 02:20

一.DOM的创建

DOM节点一般对应的是标签,文本或者是一个HTML属性
1.Element,元素
2.Attribute,属性
3.Text,文本
DOM 节点的创建标签document.createElement和DOM 节点的创建文本docment.createTextNode

例子:
var node1 = document.createElement(‘div’);
var node2 = document.createTextNode(‘hello world!’);
document.body.appendChild(node1);
文本插入到标签中用
node1.appendChild(node2);

二.DOM的查询

//返回标签内具有第一个类名是myclass的元素
var el = document.querySelector(‘.myclass’);
// 返回一个文档中所有的class为”note”或者 “alert”的div元素
var els = document.querySelectorAll(“div.note, div.alert”);

// 获取元素
var el = document.getElementById(‘note’);
var els = document.getElementsByClassName(‘highlight’);
var els = document.getElementsByTagName(‘td’);

// 获取父元素、父节点
var parent = ele.parentElement;
var parent = ele.parentNode;//只读,没有兼容性问题
var offsetParent=ele.offsetParent;//只读,找到最近的有定位的父节点。

//没有定位父级时,默认是body;但在IE7以下,如果当前元素没有定位属性,返回body,如果有,返回HTML;
// 获取子节点,子节点可以是任何一种节点,可以通过nodeType来判断

var nodes = ele.children;//标准下、非标准下都只含元素类型,但对待非法嵌套的子节点,处理方式与childNodes一致。
var nodes = ele.childNodes;//非标准下:只包含元素类型,不会包含非法嵌套的子节点。

//标准下:包含元素和文本类型,会包含非法嵌套的子节点。
//获取元素属性列表
var attr = ele.attributes;

// 查询子元素
var els = ele.getElementsByTagName(‘td’);
var els = ele.getElementsByClassName(‘highlight’);

// 当前元素的第一个/最后一个子元素节点
var el = ele.firstChild;//对待标准和非标准模式,如childNods
var el = ele.lastChild;
var el = ele.firstElementChild;//非标准不支持
var el = ele.lastElementChild;

// 下一个/上一个兄弟元素节点
var el = ele.nextSibling;
var el = ele.previousSibling;
var el = ele.nextElementSibling;
var el = ele.previousElementSibling;

三.DOM的更改

// 添加、删除子元素
ele.appendChild(el);
ele.removeChild(el);

// 替换子元素
ele.replaceChild(el1, el2);

// 插入子元素
parentElement.insertBefore(newElement, referenceElement);

//克隆元素
ele.cloneNode(true) //该参数指示被复制的节点是否包括原节点的所有属性和子节点

四.属性操作

// 获取一个{name, value}的数组

<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.getElementById("sss").attributes["value"];document.write(d.name);document.write(d.value);//显示value aaa</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.getElementById("sss").getAttribute("value");document.write(d);//显示 aaa</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.getElementById("sss").setAttribute("good","hello");alert(document.getElementById("t").innerHTML)</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.createAttribute("good");document.getElementById("sss").setAttributeNode(d);alert(document.getElementById("t").innerHTML)</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.getElementById("sss").removeAttribute("value");alert(document.getElementById("t").innerHTML)</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.getElementById("sss").getAttributeNode("value"); document.write(d.name);document.write(d.value);//显示 value aaa</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.createAttribute("good");document.getElementById("sss").setAttributeNode(d);alert(document.getElementById("t").innerHTML);</script>
<body><div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div></body><script>var d = document.getElementById("sss").getAttributeNode("value")document.getElementById("sss").removeAttributeNode(d); alert(document.getElementById("t").innerHTML);</script>

*

*转自:http://blog.csdn.net/firesnake666/article/details/6031131

innerHTML与outerHTML的区别?
innerHTML:内部HTML;
outerHTML:外部HTML;

innerText:内部文本,content;
outerText:内部文本,content;

其他来自:http://www.cnblogs.com/shytong/p/4995185.html

创建完节点需要插入到文本中
往body中插入
attributes:获取一个属性作为对象
getAttribute:获取某一个属性的值
getAttributeNode:获取一个节点作为对象

attributes可以获取一个对象中的一个属性,并且作为对象来调用,注意在这里要使用“[]”,IE在这里可以使用“()”,考虑到兼容性的问题,要使用“[]”。

关于attributes属性的使用方式上,IE和FF有巨大的分歧,在此不多介绍。

attributes的使用方法:(IE和FF通用)getAttribute,setAttribute,createAttribute,removeAttribute四兄弟的概念比较容易理解,使用方法也比较简单,唯一需要注意这几点:

1、createAttribute在使用的时候不需要基于对象的,document.createAttribute()就可以。

2、setAttribute,createAttribute在使用的时候如果是使用的时候不要使用name,type,value等单词,IE都FF的反应都奇怪的难以理解。

3、createAttribute在使用的时候如果只定义了名字,没有d.nodeValue = “hello”;语句定义值,FF会认为是一个空字符串,IE认为是undefined,注意到这点就可以了。

getAttribute的使用方法:
setAttribute的使用方法:(你会发现多了一个名为good的属性hello)
createAttribute的使用方法:(多了一个名为good的空属性)
removeAttribute的使用方法:(少了一个)

getAttributeNode,setAttributeNode,removeAttributeNode三个方法的特点是都直接操作一个node(节点),removeAttributeNode在一开始的时候总会用错,但是充分理解了node的含义的时候,就能够应用自如了。

原创粉丝点击