<body>
<pre>
<div>
DOM基本概念/*兼容性问题或者说是差异主要由于浏览器采用标准不同造成*/
Document Object Model 文档对象模型
文档:html页面
文档对象:文档中的元素
文档对象模型:定义 为了让程序(JS)能够去操作页面中的元素
DOM将文档当作一个树状结构,并且定义了方法来操作页面中节点
比如 documentElementById等是方法,可以设置的
比如 document,document.body等是属性,只读的
document
html
head body
p ul
li li...
DOM节点类型 共计12种
元素.nodeType 只读属性 节点类型
元素节点 1
属性节点 2
文本节点 3
元素.attributes 只读属性 节点属性列表
if( 元素.childNodes[i].nodeType == 1 ){
如果节点类型为1,即元素节点,就执行
}
元素.childNodes 只读属性 子节点列表集合/*不推荐使用*/
/*推荐使用children,标/非标只包含元素类型节点*/
/*非法嵌套的解析不同依旧存在,主要因为浏览器标准造成*/
</div>
<div>
firstChild 只读属性
标准下:包含文本类型节点,firstChild firstElementChild 均有
非标准下:只包含元素节点,没有firseElementChild
兼容
var oFirst = firstElementChild||firstChild;
/*但是,标准下初始时如果元素内没有子节点,依旧会报错*/
推荐使用 元素.children[i]
<div>
lastChild最后一个子节点
nextSibling下一个兄弟节点
previousSibling上一个兄弟节点
</div>
</div>
<div>
parentNode 当前节点的父节点 只读属性 /*无兼容问题*/
</div>
<div>
offsetParent 当前元素最近的有定位的父节点
没有定位父级 默认为body/*无兼容问题*/
IE7以下
自身有定位时 默认为html或者触发了layout特性的父节点/*元素layout测试(.currentStyle.hasLayoyt;)*/
自身没有定位 默认为body
</div>
<div>
元素.offsetTop[Left]:只读属性 当前元素到定位父级(offsetParent)的距离
</div>
<div>
元素.style.width[height]; /*样式宽[高]*/
元素.clientWidth[Height]; /*样式宽[高]+padding*/
元素.offsetWidth[Height]; /*样式宽[高]+padding+border*/
</pre>
<!--此处截断pre标签,防止例子变形-->
<!--并且证明offsetTop等属性的结果,会因为元素位置异常改变而改变-->
<div id="box" style="width: 100px; height: 100px; padding: 10px; border: 10px solid #f60; overflow: hidden; margin-left: 200px;">
<div id="cont" style="width: 100px; height: 200px; background: #FFC200;"></div>
</div>
<pre>
style="width: 100px; height: 100px; padding: 10px; border: 10px solid #f60; overflow: hidden; margin-left: 150px;"
style="width: 100px; height: 200px; background: #FFC200;"
<div>
pos
while(obj){
pos += obj.offsetLeft[Top];/*包含元素边框*/
obj = obj.offsetParent;
}
</div>
</div>
<div>
<div>
元素属性(方法)
</div>
. & [];
元素.getAttribute(属性名称); 方法 获取指定元素的指定属性值
元素.setAttribute(属性名称); 方法 设置指定元素的指定属性值
元素.removeAttribute(属性名称); 方法 删除指定元素的指定属性值
比如:oCont.removeAttribute('id');
此方法相比较于.和[],可操作自定义属性
此方法相比较于.和[],src地址不会出现完整路径/*ie7依旧为完整路径*/
</div>
<div>
元素创建(方法)
<div>
父级.appendChild(要添加的元素);
父级.insertBefore(新的元素,被插入的子元素);
比如:oUl.insertBefore(oLi,oUl.children[i]);
问题:
在IE下,如果第二个参数的元素不存在会报错
标准下,如果第二个参数的元素不存在会以appendChild的形式插入
解决:
if( 被插入的子元素 ){
父级.insertBefore(新的元素,被插入的子元素);
}else{
父级.appendChild(要添加的元素);
}
需要删除元素的父级.removeChild( 需要删除的元素 );
被替换元素的父级replaceChild( 替换的新元素,被替换的元素 );
</div>
</div>
<div>
表格
<div>
tHead 表格头
tBodies 表格正文
tFoot 表格尾
rows 表格行
cells 表格列
oTab.tBodies[i].rows[i].cells[i].innerHTML
<a href="04-DOM表格.html" target="_blank">表格实例</a>
</div>
</div>
<div>
表单
<div>
读取
oForm[name][attributes];
onchange
oFrom[name].onchange = fn;
text:焦点移出后触发
radio/checkbox:
标准下:点击改变值触发
非标准下:焦点移开后触发
select:/*取值:oForm[name].value;*/
选中即触发
事件
onsubmit 表单提交事件对应配合 type = 'submit' 标签使用
oForm.onsubmit = function (){
if( this[name][value...] == '' ){
alert ('请输入内容');
return false;
}
};
submit(); 提交表单方法,可以配合其他按钮或事件使用
onreset 表单重置
配合confirm使用
oFrom[name].onreset = function (){
return confirm('是否充值表单');
};
</div>
</div>
</pre>
</body>