前端学习-JavaScript基础(DOM)

DOM

DOM :全称Document Object Model ,叫文档对象模型–顶层对象是document。

一、html基本结构

//获取html标签
console.log(document.documentElement) 
//获取body标签
document.body
//获取head标签
document.head
//获取网页标题
document.title
//设置网页标题:
document.title=

二、获取标签(6种)

1、使用id名,获取标签不严谨,名字可以取关键字

<button id='var'>按钮</button>

var a=document.getElementById('var')

2、通过标签名

<body>
<button class="one">按钮1</button>
<button class="two">按钮3</button>
</body>

<script>
var b=document.getElementByTagName('button')
//多个button也会被获取  
console.log(b) // 控制台输出:HTMLCollection(2) [button.one, button.two]
</script>

3、通过类名

document.getElementByClassName()

<button class="one">按钮1</button>
var b=document.getElementByClassName('.one')
console.log(b)

4、通过name属性

document.getElementByName()

<input type="text" name='uname'/>
    
var in=document.getElementByName('uname')
console.log(b)

5、通过css选择器(常用)

document.querySelector(css选择器)

<div></div>

var div=document.querySelector("div")
console.log(div)

//获取到的标签其实是一个对象
console.dir(div)   //div对象,里面有相应属性键值对

document.querySelectorAll(css选择器)

<ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    
var li=document.querySelectorAll("ul li")  //获取所有的li
console.log(li)

三、内容操作

1、获取文本 innerText

//获取标签
var box=querySecletor('.box')
//获取标签里内容
console.log(box.innerText)
//设置文本内容
box.innerText="hh"

2、获取带标签的内容innerHTML

获取连标签也能获取到/设置标签能被解析

<div class="box">
    这是盒子
</div>

var box = document.querySelector('.box');
console.log( box.innerText );
console.log( box.innerHTML );

区别如下:

请添加图片描述

3、设置内容

box.innerText='<b>hh</b>'
box.innerHTML='<b>hh</b>'

4、表单元素用 .value获取

四、样式操作

获取样式

语法:window.getComputedStyle(标签)

<div class="box" style="width: 300px;"></div>

var box=document.querySelector('.box')
    console.log(box)
    var a = getComputedStyle(box).width //  var a = getComputedStyle(box)['width']
    console.log(a)

设置样式

语法:标签.style.css键 = 值

css键带有连字符 的属性用 [‘’] 或者 小驼峰写法

box.style.backgroundColor="#aad"
box.style.['background-color']='#ada'

五、 属性操作

设置属性

标签.setAttribute(键, 值)

<div ><div>
var div = document.querySelector('div');
div.setAttribute('name', 'aaa')

获取属性

标签.getAttribute(键)

<div name='aaa'><div>
var div = document.querySelector('div');
console.log(div.getAttribute('name'))

删除属性

标签.removeAttribute(键)

<div name='aaa'><div>
var div = document.querySelector('div');
console.log(div.removeAttribute('name'))

利用属性操作设置样式

div.setAttribute('style', 'width:200px;height:100px;background-color:#0f0;')

利用属性操作设置类名

div.setAttribute('class', 'box')

六、类名操作

类名获取

 标签.className 

类名设置

 标签.className = '类名'

例子:

<style>
    .box{
        width: 100px;
        height: 100px;
        border: 1px solid #000;
    }
    .red{
        background-color: #f00;
    }
</style>

<div class="box"></div>
<button>按钮</button>

//要先获取标签,在设置类名
var btn = document.querySelector('button');
var box = document.querySelector('.box');
btn.onclick = function() {
    // 给box设置多一个类名red
    // box.className = 'box red'  //点击按钮div背景变红
    box.className = ''   //点击按钮没有类名,div消失
}

七、 窗口的大小

不包含滚动条的窗口大小

documen.documentElement.clientWidth
documen.documentElement.clientHeight

获取body的大小

document.body.clientWidth
document.body.clientHeight

包含滚动条大小

window.innerWidth
window.innerHeight

八、 节点操作

创建节点

document.createElement(‘标签名’)

var div=document.createElement('div')  //创建div标签
console.log(div)  //输出:<div></div>

插入节点

  • appendchild()
 var a=document.createElement('i')
     a.innerText="插入1"
    //  第一种插入 语法:父标签.appenChild(子标签)
     document.body.appendChild(a)  //将i标签放到body中
  • insertBefore()
 // 第二种插入 语法:父标签.insertBefore(新的子标签,旧的子标签)
    var b=document.createElement('b')
    b.innerText="插入2"
    // 把b标签放到i标签后面
    document.body.insertBefore(b,a)   //输出 :插入2  插入1

替换节点

replaceChild()

// 替换节点 语法:父标签.replaceChild(新的子标签,旧的子标签)
    var c=document.createElement('p')
    c.innerText="替换3"
    //c换掉a 
    document.body.replaceChild(c,a)   // 输出: 插入2 替换3

复制节点

cloneChild()

 // 复制节点  语法:父标签.cloneNode(true)
    var d=a.cloneNode(true)
    console.log(d)   //控制台输出:<i>插入1</i>

删除节点

removeChild()

 //删除节点  语法: 父标签.removeChild(被删除的子标签)
    document.body.removeChild(b)    //输出 :替换3

九、节点获取

获取节点的常用
1、获取所有子标签节点: 父标签.chilren (例如:ul.children)
2、获取第一个子标签节点: 父标签.firstElementChild (例如:ul.firstElementChild)
3、获取最后一个子标签节点:父标签.lastElementChild (例如:ul.lastElementChild)
4、获取父标签节点: 子标签.parentElement
5、获取下一个兄弟标签节点 ; 兄弟标签.nextElementSibling
6、获取上一个兄弟标签节点 ; 兄弟标签.previousElementSibling

例子:

<body>
<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
</body>
<script>
    // 获取所有子节点
    var ul = document.querySelector('ul')
    var chill = ul.childNodes;
    console.log(chill) //li  
    // 获取所有子标签节点
    var chillden = ul.children;
    console.log(chillden)
    //获取父标签的第一个子节点
    var frist = ul.firstChild;
    console.log(frist)
    //获取父标签的第一个子标签节点
    var firstEl = ul.firstElementChild;
    //获取最后一个子节点
    var last = ul.lastChild;
    //获取最后一个子标签节点
    var lastEl = ul.lastElementChild;
    // 获取父节点 (通过子节点)
    var fater = lastEl.parentNode;
    //获取父标签节点 (通过子节点)
    var faterEl = last.parentElement;
    // 获取下一个兄弟节点
    var nextSi = firstEl.nextSibling;
    //获取下一个兄弟标签节点
    var next = firstEl.nextElementSibling;
    // 获取上一个兄弟节点
    var headSi = lastEl.previousSibling;
    //获取上一个兄弟标签节点
    var head = lastEl.previousElementSibling;
</script>

获取节点坐标位置

这个坐标位置是相对于父元素(事件源)的位置。

标签.offsetLeft
标签.offsetTop

例子

css样式:

.box{
    width: 300px;
    height: 300px;
    background-color: rgb(182, 134, 134);
    position: relative;

}
.small{
    width: 100px;
    height: 100px;
    background-color: aqua;
    position: absolute;
    top: 100px;
    left: 100px;
   
}

html代码:

<body>
    <div class="box">
        <div class="small"></div>
    </div>
    <button>按钮</button>
</body>
<script>
var small = document.querySelector('.small');
var left = small.offsetLeft    //获取距离大div左边的距离  100
var tp = small.offsetTop        //获取距离大div顶部的距离  100
console.log(left, tp);

document.querySelector('button').onclick = function() {
    var timer = setInterval(function() {
        var left = small.offsetLeft    //获取小div的left的位置
        left += 2     //向左一点一点移动
        if(left >= 200) {
            left = 200
            clearInterval(timer)
        }
        small.style.left = left + 'px'
    }, 10)
}
</script>

效果展示:

请添加图片描述

十、获取标签大小

就像是div盒子的宽高。

(包含边框)
标签.offsetWidth 
标签.offsetHight 

不包含边框
标签.clientWidth
标签.clientHeight

十、获取滚动条滚动距离

有文档声明(< !DOCTYPE html>)

document.documentElement.scrollTop
document.documentElement.scrollLeft

没有文档声明

document.body.scrollTop
document.body.scrollLeft

滚动条滚动事件 window.onscroll

//判断滚动条是否移动
兼容写法:var t= document.documentElement.scrollTop || document.body.scrolTop

十二、短路运算

短路运算就是一种赋值操作 (|| 、&&参与),将连接的两个值经过判断选择其中一个赋值给变量。

var c = 0 && 1
console.log(c);  //输出 0

var a= 0 || true;
var b= '' || flase
console.log(a)   //true
console.log(b)	 //false

十三、易混点

窗口大小,标签位置坐标,标签大小,滚动条滚动距离,鼠标位置(在事件中的,提前拿上来)。

我在做一个练习时也被搞得有点乱,所以就拿出总结记忆一下(细细对比,认真理解)。

获取标签位置:标签.offsetLeft 、标签.offsetTop

获取标签大小 :

包含边框:标签.offsetWidth / offsetHeight

不包含边框 :标签.clientWidth / clientHeight

窗口(浏览器)大小

包含滚动条:window.innerWidth / innerHeight

不包含滚动条:document.documentElement.clientWidth / clientHieht

获取body大小:document.body.clientWidth / clientHeight

滚动过的距离

有文档声明:document.documentElement.scrollTop /scrollLeft

没有文档声明:document.body.scrollTop /scrollLeft

获取鼠标的位置:

  • 相对于事件源(相当于div中):事件对象.offsetX /offsetY
  • 相对于浏览器窗口:事件对象.clientX / clientY
  • 相当于整个页面(html):事件对象.pageX /pageY
    `

等了很久才写完,本来在星期六就可以写完,咳咳因为种种阻挠。这篇可能总结的不到位,主要是DOM,对网页文档的操作;哪里有错,请及时私信我修改,加油。

在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值