dom常用属性和节点操作

1. css操作

1. 通过元素的 style 属性,只能获取元素写在行间的样式,通过 元素的style 属性设置的杨hi也是行间样式

2. 通过 getComputedStyle( 元素对象 , null ),可以获取元素的非行间样式

该方法的第一个参数是要 获取样式的元素对象,第二个参数一般写成 null,它的含义是伪类或者伪元素

一旦有第二个参数,则表示获取的是 伪类或者伪元素 的css样式

在ie中,可以使用 currentStyle 来获取元素的样式,例如 wp. currentStyle[ 'width' ]

//获取 wp 对象的所有样式
let obj = getComputedStyle(wp,null);
console.log(obj.width,obj.height);  //wp 对象的宽高

let obj2 = getComputedStyle(wp,':hover');
console.log(obj2.background);

每点击一次宽度增加5px

// 每点击一次宽度增加 5px
let btn = document.getElementById('btn');
btn.onclick = function(){
    let w = getComputedStyle(wp).width;
    wp.style.width = parseInt(w)+5+'px';
}


2.dom常用属性

父子关系的常用属性

childNodes 获取所有的子节点

children 获取所有的子元素( dom元素 )

firstChild 获取元素的第一个子节点,相当于 childNodes[0]

firstElementChild 获取元素的第一个子元素,相当于 children[0]

标准浏览器和ie高版本会把回车(换行)当作文本节点,ie低版本(8及其以下)不会,也就是ie 6 7 8不支持

lastChild 获取元素最后一个子节点

lastElementChild 获取元素最后一个子元素

let list = document.querySelector('#list');
//把第一个li的颜色设置为红色
list.firstElementChild.style.color = '#f00';
//控制台输出list的最后一个子节点和子元素
console.log(list.lastChild,list.lastElementChild);

parentNodeparentElement  都是查找元素的父元素

一般 parentNode 兼容性更好,因此更常用

let li = document.querySelector(#list>li:nth-child(4));
li.style = `
    font-size: 40px;
    color: #f00;
`;
//查找父节点
console.log(li.parentNode,li.parentElement);


兄弟关系的常用属性

nextSibling 获取当前元素的下一个兄弟节点

nextElementSibling 获取当前元素的下一个兄弟元素(ie 6 7 8不支持)

previousSibling 获取当前元素的上一个兄弟节点

previousElementSibling 获取当前元素的上一个兄弟元素(ie 6 7 8不支持)

<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    饸饹条

    <!-- 固始鹅块 -->

    <!-- 裹凉皮 -->
    壮馍
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
 </ul>
let li = document.querySelector('#list>li:nth-child(6)');
li.style.fontSize = '40px';
console.log(li.nextSiling,li.nextElementSiling);

//给当前元素的下一个元素,添加样式
li.nextElementSibling.style.color = '#f00';
console.log(li.previousSibling,li.previousElementSibling);

//获取当前元素的上一个节点 和 上一个元素
 li.previousElementSibling.style.color = '#04be02';

封装一个通用方法,使得在低版本ie中,也可以直接获取下一个dom元素

//传入当前元素的对象,返回下一个元素对象
function getEle(domObj){
    //如果不存在参数
    if(!domObj){
        console.log('输出',ele.nodeType);
        ele = ele.nextSiling;
        //如果没有下一个元素
        //if(ele == null){
            return null;
        //}
    }
    return ele;
}
console.log(getEle(li));

let li10 = document.querySelector('#list>li:nth-child(10)');
console.log(getEle(li10));


3.dom节点操作

innerHTML 的两个弊端

1. 会引起页面底层的重新渲染,每一次重新渲染都会重新刷新元素中的内容。在刷新之后,元素不再是原来的那个元素,那么此元素绑定的所有实现都不会生效

2. 正是因为 innerHTML 会引起页面底层的重新渲染,这样比较耗时,性能比较低

<div class="wp">
    <h1>周公旦</h1>
    <button id="btn">点击封神</button>
</div>
let btn = document.querySelector('#btn');  //button
let wp = document.querySelector('.wp');  //div
//绑定点击事件
btn.onclick = function(){
    alert('点击封神!!!');
}
//innerHTML引起底层页面重新渲染,点击效果不能生效了
wp.innerHTML += '<p>但得妖娆能举动,娶回长乐侍君王</p>';

创建和添加元素

createElement(标签名)

使用dom方法创建一个元素,创建之后的元素可以使用任何元素具有的方法

父元素.appendChild(子元素)

把指定那个的子元素添加到父元素的最后

<div class="wp2">
    <h1>周公吐哺</h1>
    <button id="btn1">天下归心</button>
</div>
let btn1 = document.querySelector('#btn1');
let wp1 = document.querySelector('.wp1');
//绑定点击事件
btn1.onclick = function(){
    alert('李子');
}
//创建一个p标签
let p = document.createElement('p');
p.innerHTML = '梦到找厕所';
//把创建的标签,添加到父元素中
wp1.appendChild(p);

注意:

如果需要使用 innerHTML,尽量在for循环外部使用,尽可能的不要在for循环内部使用 innerHTML

如果元素内部有时间操作,则可以使用 createElement 创建元素,如果展示信息,则可以使用 innerHTML

<ul id="list"></ul>
<button id="start">点击开始</button>
let start = document.querySelector('#start');
let list = document.querySelector('#list');
//绑定点击事件
start.onclick = function(){
    //计时
    console.time('计时');
    let html = '';  //1
    for(let i=0;i<100;i++){
        // list.innerHTML += '<li>功名夏侯尚州</li>';  //2

        //let li = document.createElement('li');  //3
        //li.innerHTML = '功名夏侯尚州';  //3
        //list.appendChild(li);  //3

        html += '<li>功名夏侯尚州</li>';  //1
    }
    list.innerHTML = html;  //1
    console.timeEnd('计时');
}

 父元素.insertBefore(要添加的元素,父元素中的指定子元素)

把要添加的元素(参数1),添加到 父元素中的指定子元素(参数2) 之前

注意:

使用该方法,一定要使用两个参数,如果第二个参数不存在或者不合法,则 会把元素添加到 父元素的末尾,类似 appenChild()

let n = 0;
add.onclick = function(){
    n++;
    let huang = document.querySelector('#list>li:nth-child(2)');
    //创建节点
    let li = document.createElement('li');
    li.innerHTML = '李子'+n;
    
    //在元素 huang 前面插入 元素 li
    list.insertBefore(li,huang);
}

删除元素

父级.removeChild(要删除的子元素)

参数必须是一个元素对象,否则报错

 删除元素之前,必须先找到元素

返回值是 删除的对象

let del = document.querySelector('#del');
//点击删除
del.onclick = function(){
    //获取要删除的元素
    let first = document.querySelector('#list>li:nth-child(1)');
    if(confirm('你确定要删除吗?')){
        //删除元素
        list.removeChild(first);
        alert('删除成功');
    }
}

confirm(对话内容)

他是一个对话框,如果用户点击确定,就返回true,否则返回false

因此常在 if 语句中使用,来判断用户的某项操作

替换元素

被替换元素的父级元素.replaceChild(替换的元素,被替换的元素);

返回值是 被替换的元素对象

function aa(ele){
    return document.querySelector(ele);
}
aa('#btn').onclick = function(){
    let h2 = document.createElement('h2');
    h2.innerText = '多少楼台烟雨中';
    //替换元素
    aa('.wp').replaceChild(h2,aa('.h1'));
}

克隆元素

被克隆的元素对象.cloneNode();

参数 默认是 false

false:不复制子级中的 dom结构和节点

true:深层拷贝,被克隆对象的子级 dom结构 和 节点 都会被复制

该方法的返回值是 复制的元素对象

复制的是元素节点的结构,不会复制该节点上的事件

aa('.btn1').onclick = function(){
    alert('朝如青丝暮成雪');
 }

aa('#copy').onclick = function(){
    //拷贝 wp1
    let ele = aa('.wp1').cloneNode(true);
    //获取body
    let body = document.body;
    //把复制的结果存入body里面
    body.appendChild(ele);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值