1.创建Li
<input id="btn1" type="button" value="创建Li"/>
<ul id="ul1">
<li>aaa</li>
</ul>
JS代码:
window.onload=function ()
{
var oBtn=document.getElementById('btn1');
var oUl=document.getElementById('ul1');
oBtn.onclick=function ()
{
var oLi=document.createElement('li');
//父.appendChild(子节点)
oUl.appendChild(oLi);
}
}
1.2动态创建Li,并把文本框的值当做Li的值
HTML部分为:
<input id="txt1" type="text" />
<input id="btn1" type="button" value="创建Li"/>
<ul id="ul1">
<li>aaa</li>
</ul>
JS代码为:
window.onload=function ()
{
var oBtn=document.getElementById('btn1');
var oTxt=document.getElementById('txt1');
var oUl=document.getElementById('ul1');
oBtn.onclick=function ()
{
var oLi=document.createElement('li');
oLi.innerHTML=oTxt.value;
//父.appendChild(子节点)
oUl.appendChild(oLi);
}
}
这里我们新插入的是放在了最后,怎么样放在最前面了
var oBtn=document.getElementById('btn1');
var oTxt=document.getElementById('txt1');
var oUl=document.getElementById('ul1');
oBtn.onclick=function ()
{
var oLi=document.createElement('li');
var aLi=oUl.getElementsByTagName('li');
oLi.innerHTML=oTxt.value;
oUl.insertBefore(oLi, aLi[0]);
}
这样写有一个问题:如果以开始并没有Li就会报错,我们需要判断下
oBtn.onclick=function ()
{
var oLi=document.createElement('li');
var aLi=oUl.getElementsByTagName('li');
oLi.innerHTML=oTxt.value;
if(aLi.length==0)
{
oUl.appendChild(oLi);
}
else
{
oUl.insertBefore(oLi, aLi[0]);
}
}
2.删除元素
<ul id="ul1">
<li>sdfsdf <a href="javascript:;">删除</a></li>
<li>3432 <a href="javascript:;">删除</a></li>
<li>tttt <a href="javascript:;">删除</a></li>
<li>ww <a href="javascript:;">删除</a></li>
</ul>
JS部分为:
var aA=document.getElementsByTagName('a');
var oUl=document.getElementById('ul1');
var i=0;
for(i=0;i<aA.length;i++)
{
aA[i].onclick=function ()
{
oUl.removeChild(this.parentNode);
}
}
2.ChildNodes和NodeType
<ul id="ul1">
<li></li>
<li></li>
<li></li>
</ul>
js部分:
var oUL = document.getElementById("ul1");
alert(oUL.childNodes.length);
可见在谷歌下面弹出长度为7,在IE较低版本中弹出来的却是3
我们将htm改为
<ul id="ul1"><li></li><li></li><li></li></ul>
这样弹出来的长度都是为3,可见那些空白文本也加进去了。
所以我们使用需要加上NodeType来使用
var oUl=document.getElementById('ul1');
var i=0;
for(i=0;i<oUl.childNodes.length;i++)
{
if(oUl.childNodes[i].nodeType==1)
{
oUl.childNodes[i].style.background='red';
}
}
常见的NodeType
语法:
elementNode.nodeType
节点数: 节点名称:
1 Element | 元素
2 Attribute | 属性
3 Text | 文本
4 CDATA Section | CDATA 断
5 Entity Reference | 实体参数
6 Entity | 实体
7 Processing Instrucion | 处理指令
8 Comment | 注释
9 Document | 文档
10 Document Type | 文档类型
11 Document Fragment | 文档片断
12 Notation | 符号
3.children
html部分不变,JS为:
var oUL = document.getElementById("ul1");
alert(oUL.children.length);
可见弹出的都是3.可以认为这个是上面的一个兼容性版本,用来取第一层的子节点。
4.parentNode
HTML部分为:
<ul>
<li>aass <a href="javascript:;">隐藏</a></li>
<li>5453 <a href="javascript:;">隐藏</a></li>
<li>cvxc <a href="javascript:;">隐藏</a></li>
<li>ertert <a href="javascript:;">隐藏</a></li>
</ul>
JS部分为:
var aA=document.getElementsByTagName('a');
var i=0;
for(i=0;i<aA.length;i++)
{
aA[i].onclick=function ()
{
this.parentNode.style.display='none';
}
}
点击隐藏,对应的父节点LI隐藏。
5.offsetParent
获得当前元素用来定位的那个父级
html:
<body>
<div id="div1" style="width: 100px; height: 100px; background: red; margin: 100px;">
<div onclick="alert(this.offsetParent.tagName)" id="div2" style="width:100px; height:100px; background:yellow; position:absolute; left:100px; top:100px;"></div>
</div>
</body>
由于父级的DIV是相对定位,所以会弹出DIV
如果去掉position:relative,会一级级的网上找,找到BODY
6.firstElementChild和firstChild
<ul id="ul1">
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
在IE只支持firstchild,谷歌支持firstElementChild,所以我们要做兼容性模式
var oFirst = oul.firstElementChild || oul.firstChild;
oFirst.style.background = 'red';
可见第一个LI背景色变为红色
7.lastElementChild和lastChild
和上面的用法一样,最后一行LI变红色。
8.nextElementSibling和nextSibling;
用法同上,也是个兼容的两个属性,获取元素下一个节点。
9.previousElementSibling 和previousSibling;
获取元素的上一个节点
10.操作元素属性:getAttribute,setAttribute,removeAttribute
获取:getAttribute(名称)
设置:setAttribute(名称,值)
删除:removeAttribute(名称)
HTML:
<input type="text" id="txt1" />
var text = document.getElementById("txt1");
alert(text.getAttribute('id'));
text.setAttribute("value", "爸爸去哪儿");
text.removeAttribute("value");
removeAttribute清空文本框
11.用CLASS选取元素
htm:
<ul id="ul1">
<li></li>
<li></li>
<li></li>
<li class="box"></li>
<li></li>
<li class="box"></li>
<li class="box"></li>
<li></li>
<li></li>
<li></li>
</ul>
JS:
var oUl=document.getElementById('ul1');
var aLi=oUl.getElementsByTagName('li');
var i=0;
for(i=0;i<aLi.length;i++)
{
if(aLi[i].className=='box')
{
aLi[i].style.background='red';
}
}
这样有CLASS为box的LI会显示红色
我们可以做一个小小的封装
function getByClass(oParent, sClass)
{
var aEle=oParent.getElementsByTagName('*');
var aResult=[];
var i=0;
for(i=0;i<aEle.length;i++)
{
if(aEle[i].className==sClass)
{
aResult.push(aEle[i]);
}
}
return aResult;
}
window.onload=function ()
{
var oUl=document.getElementById('ul1');
var aBox=getByClass(oUl, 'box');
var i=0;
for(i=0;i<aBox.length;i++)
{
aBox[i].style.background='yellow';
}
}