Web第四课(DOM)

1. DOM简介

DOM document object model(文档对象模型)
在网页中一切皆对象,javascript可以获取这些对象并且操作它们。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM基础</title>
</head>
<body>
    <button id="btn">我是一个按钮</button>
    <script type="text/javascript">
        /*
            浏览器已经为我们提供了整个文档节点对象,这个对象就是window属性
                可以在页面中直接使用,文档节点代表的是整个网页。
        */
        // console.log(document);
        // 获取到button对象
        var btn = document.getElementById("btn");
        // 修改按钮的文字
        btn.innerHTML = 'I\'m a button';
    </script>
</body>
</html>

2. 事件简介

文档或浏览器窗口中发生的一些特定交互的瞬间

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <title>事件</title>
</head>
<body>
    <button id='btn'>我是一个按钮</button>
    <script type="text/javascript">
        // 可以为对象对应的事件绑定处理函数来处理相应事件
        var btn = document.getElementById('btn');
        btn.onclick = function(){
            alert('你竟然敢点我?!!!');
        };
    </script>
</body>
</html>

3. 让javascript在整个页面加载完成之后再执行

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <title>让javascript的代码在整个文档加载完成之后再执行</title>
    <script type="text/javascript">
        // var btn = document.getElementById('btn');
        // btn.onclick = function () {
        //     alert('你竟然真的敢点我?');
        // };
        /*
         *  window对象的 onload 事件会在整个页面加载完成之后触发
         */
        window.onload = function () {
            // alert('整个页面已经加载完成');
            var btn = document.getElementById('btn');
            btn.onclick = function () {
                alert('你竟然真的敢点我?');
            };
        };
    </script>
</head>

<body>
    <button id="btn">你点我试试?</button>
</body>

</html>

4. DOM查询

Document.getElementById()
Document.getElementsByName();
Document.getElementsByTagName();
Document.getElementsByClassName();
Document.getElementsByTagNameNS();
Document.querySelector();
Document.querySelectorAll();

5. innerHTML和innerText

innerHTML用于获取元素内部的HTML代码,对于自结束标签,这个属性没有意义。
innerText 可以用于获取元素内部的文本内容,但是会自动将html标签去除。

6. 读取元素属性

如果需要读取一个元素的属性,直接使用 元素.attrname 即可。
这个操作可以对 idnamevalue 等有效,唯独不能对 class 使用,如果要读取 class 属性,需要使用 元素.className

7. 获取元素节点的子节点

// 通过具体的元素节点调用 getElementsByTagName()
// 可以返回当前节点的指定标签名后代节点
getElementsByTagName();
// 下面的都是属性
childNodes	//表示当前节点的所有子节点,包括了文本节点(DOM标签见得空白也会被当作文本节点)
firstChild	//表示当前节点的第一个子节点
lastChild	//表示当前节点的最后一个子节点
children	//表示当前元素的所有子元素(推荐使用)
firstElementChild	// 表示当前元素的第一个子元素(IE8及以下浏览器不支持)

8. 获取父节点和兄弟节点

parentNode	// 表示当前节点的父节点
previousSibling	// 表示当前节点的前个兄弟节点
nextSibling		// 表示当前节点的后一个兄弟节点
previousElementSibling	// 表示当前节点的前一个兄弟元素(IE8及以下浏览器不支持)
nextElementSibling		// 当前节点的后一个兄弟元素(IE8及以下浏览器不支持)

9. 文本节点的nodeValue就是文本的内容

10. 其它元素查询

  • document.body 保存的就是body的引用
  • document.documentElement 保存的是html的引用
  • document.all 表示所有的元素

11. javascript 操作DOM的实质是修改文本

因此可以使用修改DOM的 innerHTML 的方式来做到增删操作。

12. 元素的增删改

appendChild();
removeChild();
replaceChild();
insertBefore();
createAttribute();
createElement();
createTextNode();
getAttribute();
setAttribute();

13. 使用DOM来操作CSS

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <title>DOM操作CSS</title>
    <style type="text/css">
        #box1 {
            width: 200px;
            height: 200px;
            background-color: red;
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            /*
                点击按钮以后,修改box1的大小
            */
            var box1 = document.getElementById('box1');
            var btn1 = document.getElementById('btn01');
            btn1.onclick = function () {
                /*
                    通过js修改元素的样式:
                    语法:元素.style.样式名 = 样式值
                    如果css样式名中含有“-”,这种名称在js中是不合法的
                    需要将这种样式修改为驼峰命名法,去掉“-”,然后将“-”之后的字母大写

                    通过style属性设置的样式都是内联样式,具有较高优先级所以往往会立即刷新
                        但是如果在样式中写了“!important”,将无法通过js修改样式,因此尽量不要为样式设置“important”
                */
                box1.style.width = '300px';
                box1.style.backgroundColor = 'chocolate';
            };
        };
    </script>
</head>

<body>
    <button id="btn01">点我一下</button>

    <br>

    <div id="box1"></div>
    
</body>

</html>

14. 读取元素当前的样式

  样式的读取很简单 var xxx = eleName.style.styleName
  但是请注意,通过这种方式只能读取内联样式,不能读取通过样式表设置的样式。
  如果要读取元素当前显示的样式:var xxx = eleName.currentStyle.styleName,如果元素没有设置过某个样式,则获取到其默认值(仅IE浏览器支持)。
  其它浏览器中可以使用 getComputeStyle() 这个方法来获取元素当前的样式。(IE8及以下不支持)

// 下面的方法可以在其它浏览器中使用,这是window的方法,可以直接使用,并且会返回一个样式对象
// 参数1:要获取样式的元素
// 参数2:可以传递一个伪元素,一般都传null
var obj = getComputedStyle(box1, null);
// 可以通过obj.styleName来读取样式,如果没有设置该样式,则读取到的是具体的实际值。
alert(obj.height);

15. 兼容性问题

如果要兼容,则可以自定义一个方法,然后在方法中先判断当前的window具备哪种方法,然后使用该方法即可

var obj;
if (window.getComputedStyle){
	obj = getComputedStyle(box1, null);
} else {
	obj = box1.currentStyle;
}
alert(obj.height);

16. 其它样式的相关属性

下面这些属性都是只读的:
	clientWidth
	clientHeight
		- 这两个属性可以获取元素的可见宽度和高度
		- 这些属性都是不带px的,可以直接用于计算,
		- 会获取元素的宽度和高度,包括内容区和内边距
	offsetWidth
	offsetHeight
		- 这两个属性包括了内容区,内边距和边框
	offsetParent
		- 可以用来获取当前元素的定位父元素
		- 会获取到当前元素的最近的开启了定位的祖先元素
		- 如果所有的祖先元素都没有开启定位,则返回body
	offsetLeft
	offsetTop
		- 获取当前元素相对于其定位父元素的水平偏移量和垂直偏移量
	scrollWidth
	scrollHeight
		- 获取整个滚动区域的宽度和高度
	scrollLeft
	scrollTop
		- 获取水平滚动条和垂直滚动条滚动的距离
	scrollHeight - scrollTop == clientHeight,说明垂直滚动条滚到底了
	scrollWidth - scrollLeft == clientWidth,说明水平滚动条滚到底了

17. 禁用表单项

如果为表单项添加 disabled="disabled",则将禁用该表单项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值