前端之DOM/BOM

一、前端基础之BOM、DOM

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

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

 

二、BOM

  windows对象

  1、Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可               以简写成:document.write()。所有浏览器都支持 window 对象。它表示浏览器窗口。

  2、一些常用的window方法:

    1 window.inner Height --浏览器窗口的内部高度

    2 window.innerWidth -- 浏览器窗口的内部宽度

    3 window.open() --打开新窗口

    4 window.close() -- 关闭当前窗口

 

  3、windows子对象

    1、navigator对象:浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。

navigator.appName      // Web浏览器名字
navigator.appVersion  // Web浏览器厂商和版本的详细字符串
navigator.userAgent   // 客户端绝大部分信息
navigator.platform   // 浏览器运行所在的操作系统

    2、screen对象

screen.availWidth - 可用的屏幕宽度
screen.availHeight - 可用的屏幕高度

    3、history对象:window.history 对象包含浏览器的历史。浏览历史对象,包含了用户对当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。

history.forward()  // 前进一页
history.back()  // 后退一页

    4、location对象:window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

location.href     //获取URL
location.href="URL" // 跳转到指定页面
location.reload() //重新加载页面

 

  4、弹出框

    可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

    1、警告框:警告框经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。

alert("看这里。sir");

    2、确认框:确认框用于使用户可以验证或者接受某些信息。当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返                                     回值为 false。

confirm("are you sure?")

    3、提示框:提示框经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。如果用户点击确认,那么返回值为输入的值。如果用                                     户点击取消,那么返回值为 null。

prompt("你要输入啥啥啥")

 

  5、计时相关

    1、setTimeout()

    2、clearTimeout():清除设置的时间

//语法
clearTimeout(setTimeout_variable)

//例子
// 在指定时间之后执行一次相应函数
var timer = setTimeout(function(){alert(123);}, 3000)
// 取消setTimeout设置
clearTimeout(timer);

    3、setlnterval():可按照指定的周期(以毫秒计)来调用函数或计算表达式。会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。

//语法
setInterval("JS语句",时间间隔)

    4、clearInterval():可取消由 setInterval() 设置的 timeout。但参数必须是由 setInterval() 返回的 ID 值。

//语法
clearInterval(setinterval返回的ID值)

//例子
// 每隔一段时间就执行一次相应函数
var timer = setInterval(function(){console.log(123);}, 3000)
// 取消setInterval设置
clearInterval(timer);

综上例子代码演示:定时器

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>定时器</title>
  <script>
    var intervalId;

    function f() {
      var timeStr = (new Date()).toLocaleString();
      var inputEle = document.getElementById("1");
      inputEle.value = timeStr;
    }

    function start() {
      f();
      if (intervalId === undefined) {
        intervalId = setInterval(f, 1000);            //一秒就会执行
      }
    }
    function end() {
      clearInterval(intervalId);                      //清除无线执行
      intervalId = undefined;
    }

  </script>
</head>
<body>

<input type="text" id="1">
<input type="button" value="开始" id="start" onclick="start();">
<input type="button" value="结束" id="end" onclick="end();">
</body>
</html>

 

三、DOM

  DOM是一套对文档的内容进行抽象和概念化的方法,当页面被加载时,浏览器回创建页面的文档对象模型

  1、HTML DOM 模型被构造为对象的树:     DOM标准规定HTLM文档中的每一个成分都是一个节点(node)

  2、标签查找

    1、直接查找  

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

    查找标签的时候,如果需要给查找出来的标签起一个名字,推荐的写法xxEle

var fEle = document.getElementsByClassName('bb')[0]

    2、间接查找

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

 

  3、节点操作

    1、节点创造

//语法
createElement(标签名)

//例子
var divEle = document.createElement("div");

    2、节点添加

//追加一个子节点(作为最后的子节点)
somenode.appendChild(newnode);

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

//例子
var imgEle=document.createElement("img");
imgEle.setAttribute("src", "http://image11.m1905.cn/uploadfile/178.jpg");
var d1Ele = document.getElementById("d1");
d1Ele.appendChild(imgEle);

    3、节点删除

//获得要删除的元素,通过父元素调用该方法删除。
somenode.removeChild(要删除的节点)

    4、替换节点

//语法:
somenode.replaceChild(newnode, 某个节点);

    5、属性节点

//获取文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText
divEle.innerHTML

//设置文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText="1"
divEle.innerHTML="<p>2</p>"

    6、attribute操作:属性操作

var divEle = document.getElementById("dd");
divEle.setAttribute("age","20")
divEle.getAttribute("age")
divEle.removeAttribute("age")

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

    

    7、获取值操作:值操作,获取值只能是.value才能获取

//语法:
elementNode.value

//适用于以下标签:

//input   
//select
//textarea 

var iEle = document.getElementById("aa");
console.log(iEle.value);
var sEle = document.getElementById("bb");
console.log(sEle.value);
var tEle = document.getElementById("cc");
console.log(tEle.value);

    8、class相关

className               //获取所有样式类名(字符串)
classList.remove(cls)          //删除指定类
classList.add(cls)           //添加类
classList.contains(cls)       // 存在返回true,否则返回false
classList.toggle(cls)         // 存在就删除,否则添加

 

  4、指定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

 

  5、事件

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

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

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

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

代码演示:onclick

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script>-->
<!--        window.onload = function () {-->
<!--            -->
<!--        }-->
    
<!--</script>-->
</head>
<body>
<button onclick="foo()">按钮1</button>
<button id="d1">按钮2</button>
<script>
         function foo() {
                    alert('警告一次爬!')
                }
            var b1Ele = document.getElementById("d1");
            b1Ele.onclick = function () {                 绑定点击事件
                alert('再次警告再爬!')
            }
</script>
</body>
</html>

代码演示:onfocus

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" value="美女">
<script>
    var inputEle = document.getElementsByTagName('input')[0];
    inputEle.onfocus= function () {
        inputEle.value = ''
    };
    inputEle.onblur = function () {
        inputEle.value='欢迎下次再来!'
    }

//此时页面input框默认有内容美女,只有点击input框,才能自己输入内容

代码演示:省级联动事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<select name="" id="d1">
    <option value="">---请选择---</option>
</select>
<select name="" id="d2">
    <option value="">---请选择---</option>
</select>

<script>
    var data = {"湖北省": ["武汉", "恩施"],
                "北京": ["朝阳区", "海淀区"],
                "山东": ["威海", "青岛"],
                "上海": ["静安区","黄浦区"],
                "重庆": ["南山","琵琶山"]
    };
    var seEle = document.getElementById('d1');
    var se2Ele = document.getElementById('d2');
    for (var i in data){
        // 创建option标签
        var optEle = document.createElement('option');
        // 给标签添加内部文本值
        optEle.innerText = i;
        // 给标签设置value属性值
        optEle.value = i;
        // 将创建好的option标签添加到第一个select框中
        seEle.appendChild(optEle)
    }

    // 给第一个select框绑定change事件
    seEle.onchange = function () {
        var currentPro = seEle.value;
        var currentCityList = data[currentPro];
        // 先清空第二个select框中所有的option标签
        se2Ele.innerHTML = '';
        var opttEle = document.createElement('option');
        opttEle.innerText = '---请选择---';
        se2Ele.appendChild(opttEle);
        // 循环遍历数组
        for (let i=0;i<currentCityList.length;i++){

            // 动态创建标签
            var optEle = document.createElement('option');
            optEle.innerText = currentCityList[i];
            optEle.value = currentCityList[i];
            // 将创建出来的option标签添加到第二个select框中
            se2Ele.appendChild(optEle)
        }
    }
</script>
</body>
</html>

 

      

 

posted @ 2022-04-01 22:44  新入世界的小白  阅读(47)  评论(0编辑  收藏  举报