前端基础之BOM和DOM

概念

JavaScript分为ECMAScript,DOM,BOM

BOM(Browser Object Model)  是指浏览器对象模型,它使JavaScript有能力与浏览器进行对话。

DOM(Document Object Model) 是指文档对象模型,通过它,可以访问HTML文档的所有元素。

 

Window对象是客户端JavaScript最高层对象之一,由于window对象是其他大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。

BOM对象(重点)

windwo对象       

所有浏览器都支持window对象。

概念上讲,一个HTML文档对应一个window对象

功能上讲,控制浏览器窗口的。

使用上讲,window对象不需要创建对象,直接使用即可。

对象方法

alert()    //显示带有一段消息和一个确认按钮的警告框
confirm()  //显示带有一段消息以及确认按钮和取消按钮的对话框。
prompt()   //显示可提示用户输入的对话框。

open()  //打开一个新的浏览器窗口或查找一个已命名的窗口。
close() //关闭浏览器窗口。

setInterval()    //按照指定的周期(以毫秒计)来调用函数或计算表达式
clearInterval()  //取消由setInterval()设置的timeout。
setTimeout()   //在指定的毫秒数后调用函数或计算表达式
clearTimeout()  //取消由setTimeout()方法设置的timeout.
scrollTo()   //把内容滚动到指定的坐标。

方法使用

window.open();
window.alert(123);
window.confirm(546);
window.prompt("请输入信息",“hahaha”);
window.close();
//======================
function  foo(){
    console.log("hello!");
}

var ID = setInterval(foo,2000);//每隔2秒执行一下foo函数,如果不取消就会一直执行下去。
clearInterval(ID); //取消定时器
//=======================
function foo(){
    console.log("hello");
}
var ID=setTimeout(foo,2000);
clearTimeout(ID);

DOM对象(重点)

什么时HTML DOM

HTML  Document Object  Model(文档对象模型)

HTML DOM 定义了访问和操作HTML文档的标准方法

HTML DOM 把 HTML文档呈现为带有元素,属性和文本的树结构(节点树)

DOM树

前端基础之BOM和DOM

 

 

 画DOM树是为了展示文档中各个对象之间的关系,用于对象的导航。

DOM节点

DOM标准规定HTML文档中的每个成分都是一个节点(node):

  文档节点(document对象):代表整个文档

  元素节点(element对象):代表一个元素(标签)

  文本节点(text对象):代表元素(标签)中的文本

  属性节点(attribute对象):代表一个属性,元素(标签)才有属性

  注释是注释节点(comment对象)

JavaScript可以通过DOM创建动态的HTML:

  JavaScript能够改变页面中的所有HTML元素

  JavaScript能够改变页面中的所有HTML属性

  JavaScript能够改变页面中的所有CSS样式

  JavaScript能够对页面中的所有事件做出反应

查找标签

直接查找

document.getElementById   //根据ID获取一个标签
document.getElementByClassName    //根据class属性获取
document.getElementByTagName   //根据标签名获取标签合集

间接查找

parentElement    //父节点标签元素
children      //所有子标签
firstElementChild   //第一个子标签元素
lastElementChild   //最后一个子标签元素
nextElementSibling   //下一个兄弟标签元素
previousElementSibling  //上一个兄弟标签元素

节点操作

创建节点

var divEle = document.createElement('div');

添加节点

var imgEle = document.createElement("img");
imgEle.setAttribute("src","http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");
//设置属性值
var d1Ele = document.getElementById("d1");
d1Ele.appendChild(imgEle); //追加一个子节点(作为最后的子节点)


//somenode.insertBefore(newonode,某个节点);  把增加的节点放到某个节点的前面。

删除节点

var d1Ele = document.getElementById('d1');//获取父节点

d1Ele.removeChild(imgEle); //通过父元素调用该方法删除imgEle节点

替换节点

//语法:

somenode.replaceChild(newnode,某个节点)

属性节点

获取文本节点的值:

var divEle = document.getElementBy("d1");
divEle.innerText
divEle.innerHTML

设置文本节点的值:

var divEle = document.getElementById("d1");
divEle.innerText = "1";
divEle.innerHTML = "<p>2</p>";

attribute操作

var divEle = document.getElementById("d1");
divEle.setAttribute("age","18");   //设置自定义属性和自带属性 都可以
divEle.setAttribute("age");
divEle.removeAttribute("age");

//自带的属性还可以直接.属性名来获取和设置
imgEle.src
imgEle.src = "..."

获取值操作

语法:

  elementNode.value

适用于以下标签:

  input

  select

  textarea

var iEle = document.getElementById("i1");
console.log(iEle.value);
var sEle = document.getElementById("s1");
console.log(sEle.value);
var tEle = document.getElementById("t1");
console.log(tEle.value);

class的操作

className   //获取所有的样式类名

classList.remove(cls)  删除指定类
classList.add(cls)  添加类
classList.contains(cls)   存在返回true,否则返回false

classList.toggle(cls)   存在就删除,否则添加

示例:

前端基础之BOM和DOM
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            height: 400px;
            width: 400px;
            border-radius: 50%;
        }
        .red_cls{
            background-color: red;
        }
        .green_cls{
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="c1 red_cls green_cls">

    </div>

    <script>
        var divEle = document.getElementsByTagName('div')[0];
        function foo(){
            divEle.classList.toggle('green_cls');
        }
        setInterval(foo,1000);
    </script>
</body>
</html>
自动开关灯操作

 

指定CSS操作

obj.style.backgroundcolor = "red";

JS操作CSS属性的规律:

1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

obj.style.margin
obj.style.width
obj.style.left
obj.style.position

2.对于含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如

obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily

绑定事件

常用事件

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               // 练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)

onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。
onload         一张页面或一幅图像完成加载。
onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。

onselect      在文本框中的文本被选中时发生。
onsubmit      确认按钮被点击,使用的对象是form。

绑定方式

方式一:

<div id="d1" onclick="changeColor(this);">点我</dic>
<script>
    function changeColor(this){
         this.style.backgroundColor="green";
}

</script>

注意: this是实参,表示触发事件当前元素

函数定义过程中的this为形参

方式二:

<div  id="d2">点我</div>
<script>
   var divEle2 = document.getElementById("d2");
   divEle2.onclick = function(){
      this.innerText=""呵呵";
}
</script>

事件示例:

前端基础之BOM和DOM
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <input type="text">
    <button id="i1">开始</button>
    <button id="i2">暂停</button>
    <script>
        var t = null;
        var inputEle = document.getElementsByTagName('input')[0];
        var b1Ele = document.getElementById('i1');
        var b2Ele = document.getElementById('i2');

        function showtime() {
            var gettime = new Date();
            inputEle.value = gettime.toLocaleString();
        }
        b1Ele.onclick = function () {
            if (!t){
                t = setInterval(showtime,1000);
            }

        };
        b2Ele.onclick = function () {
            clearInterval(t);
            t = null;
        }

    </script>


</body>
</html>
定时器示例

 

前端基础之BOM和DOM
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<input type="text" value="哈哈"></input>
    <script>
        var inputEle = document.getElementsByTagName('input')[0];
        inputEle.onfocus = function () {
            inputEle.value = ''
        };
        inputEle.onblur = function () {
            inputEle.value = '请输入'
        }
    </script>


</body>
</html>
搜索框示例 前端基础之BOM和DOM
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<select name="" id="i1">
    <option value="">--请选择--</option>
</select>


<select name="" id="i2">
    <option value="">--请选择--</option>
</select>

<script>
        var se1Ele = document.getElementById('i1');
        var se2Ele = document.getElementById('i2');
        var data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
        for (var i in data){
            var optEle = document.createElement('option');
            optEle.innerText=i;
            optEle.value = i;
            se1Ele.appendChild(optEle);
        }
        se1Ele.onchange = function () {
            var currentPro = se1Ele.value;
            var currentCityList = data[currentPro];
            se2Ele.innerText = '';
            se2Ele.innerHTML = '<option value="">--请选择--</option>';
            for(let i = 0;i<currentCityList.length;i++){
                var optEle2 = document.createElement('option');
                optEle2.innerText = currentCityList[i];
                optEle2.value = currentCityList[i];
                se2Ele.appendChild(optEle2);
            }
        }

</script>
</body>
</html>
select 省市联动

 

 

 

 

 

 

上一篇:Python 第五十一章 js补充 Bom和Dom


下一篇:H5自定义属性的规定和添加获取自定义属性的方法