1获取父节点
var childNode = document.getElementById("child");
var parentNode = childNode.parentNode; // 获取父节点
利用dom获取元素要嵌套
引出:利用父子兄节点关系获取元素
dom树中所有节点都能通过js访问
节点至少有nodetype,nodename,nodevalue
元素节点 nodetype=1
属性节点 nodetype=2
文本节点 nodetype=3(文字,空格,换行)
节点操作主要操作的是元素节点
如果只想获得里面元素节点:
for(var i=0;i
2 parentNode.children获取所有子元素节点
3 .children[0],.children[ol.children.length-1](ol是变量,具体见楼下代码)
- li1
- li2
- li3
- li4
新浪下拉菜单
html结构:一个大ul里包括四个li,每个li里上下栏,上栏是a标签,下栏是ul包含三个li
css:
js的思路:
1 导航栏里li都要鼠标经过效果,循环注册鼠标事件
2 鼠标里第二个孩子ul显示,鼠标离开第二个孩子ul消失
获得兄弟节点(用的较少)
nextSibling获得下一个兄弟节点,包括元素节点,文本节点
previousSibling前一个兄弟节点,包括元素节点,文本节点
nextElementSibling 得到下一个兄弟元素节点
通过封装兼容性函数:
function getNextElementSibling(element) {
var el = element;
while(el = el.nextSibling) {
if(el.nodeType===1) {
return el;
}
}
return null;
}
原本ul里没有li,根据情况动态创建li放ul里
1 创建节点元素节点
var li = document.createELement('li')
2 添加节点node父级 child 子级
var ul = document.queryselector('ul')
ul.appendchild(li);//(后面新增加元素)
3 如果原来就有li元素,那么新建的元素跟在原来的后面
4 node.insertBefore(child,指定元素)
//将一个节点添加到父节点指定子节点前面
var lili = document.createelement('li');
ul.insertbefore(lili,ul.children[0]);
//在第一个元素前面插入元素
发布留言案例:
node.removechild(child)删除子节点:
var ul = document.querySelector('ul');
var btn = document.querySelector('button');
btn.onclick=function() {
if(ul.children.length==0)
btn.disable=true;
else
ul.removeChild(ul.children[0]);
}
留言框删除留言:
当我们把文本区域内的值赋值给li的时候,多加一个删除的链接
需要把所有链接取过来,点击当前链接时候,删除当前链接的li
1 加入删除按钮
li.innerHTML = text.value + "shanchu";
注意这里不是#:阻止链接跳转:添加javascript:void(0)/javascript:;
2 注意removechild只能删除他的孩子(删除a的上级li):
重点:
ul.removeChild(this.parentNode);
复制节点
var li = ul.children[0].cloneNode(true);
//这里括号为空或者为false表示浅拷贝,里面为true表示深拷贝
//只有深拷贝又拷贝元素又拷贝内容
动态生成表格:
Document
姓名
科目
成绩
操作
document.write('123')
如果页面文档流加载完毕,再调用这句话会导致页面重绘,比如增加事件如onclick
window.onload = function() {
整个页面加载完毕再调用js
}
第一种创建方式可以通过for循环达到添加多次多个元素的效果
for(var i=0;i<=100;i++)
inner.innerhtml += 'shanchu'
第一种方式转化成数组效率最高
var arr=[];
for(var i=0;i<100;i++)
{
arr.push('');
inner.innerHTML=arr.join('');//转化为数组
}