BOM和DOM

发布时间 2023-07-21 21:36:37作者: 别管鱼油我了

基础介绍

js的三部分组成

ECMAScript、BOM(浏览器对象模型,就是js操作浏览器)、DOM(文档对象模型,js操作html文档、css样式等)
BOM:大部分内容作为了解
DOM:需要熟练掌握

window对象常用方法

window.innerHeight - 浏览器窗口的内部高度
window.innerWidth - 浏览器窗口的内部宽度
window.open() - 打开新窗口
window.close() - 关闭当前窗口

# navigator对象(了解即可)
navigator.appName  // Web浏览器全称
navigator.appVersion  // Web浏览器厂商和版本的详细字符串
navigator.userAgent  // 客户端绝大部分信息
navigator.platform   // 浏览器运行所在的操作系统

# history对象(了解即可)
history.forward() // 前进一页
history.back() // 后退一页

# location对象------------------->掌握重要
location.href 获取URL
location.href="URL" // 跳转到指定页面,在pycharm写就会直接跳转至写入的界面
location.reload() 重新加载页面

# 弹出框
alert("你看到了吗?");
confirm("你确定吗?")
prompt("请在下方输入","你的答案")

计时相关(定时器)

setTimeout只执行一次:

    function f1(){
        console.log(123+Math.random());
    }
      var t1 = setTimeout(f1,3000) //单位是毫秒,三秒后执行,只执行一次

清除定时器

clearTimeout(t1);

setInterval多次循环

function f1(){
        console.log(100+Math.random())
    }
    var t2 = setInterval(f1,3000)

闭包定时器(执行3次alert)

    function f2(){
        alert(12345);
    }
    function show(){
        let t = setInterval(f2,3000);
        function inner(){
            clearInterval(t)
        }
        setTimeout(inner,9000);
    }
    show()

 

DOM(重点)

 

DOM标准规定HTML文档中的每个成分都是一个节点(node):
● 文档节点(document对象):代表整个文档
● 元素节点(element 对象):代表一个元素(标签)
● 文本节点(text对象):代表元素(标签)中的文本
● 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
● 注释是注释节点(comment对象)

JavaScript 可以通过DOM创建动态的 HTML:
● JavaScript 能够改变页面中的所有 HTML 元素
● JavaScript 能够改变页面中的所有 HTML 属性
● JavaScript 能够改变页面中的所有 CSS 样式
● JavaScript 能够对页面中的所有事件做出反应

 

查找标签:

<div id="d1" class="c1">div</div>
<div id="d2" class="c1">div</div>
<div id="d3" class="c1">div</div>
<input type="text" name="username">

以下例子按上述代码查找

直接查找:

用(id)getElementById查找

    var div = document.getElementById('d1')
    console.log(div);

    var div1 = document.getElementById('d2')
    console.log(div1)

    var div2 = document.getElementById('d3')
    console.log(div2)

用(class)getElementsByClassName查找

var div = document.getElementsByClassName('c1')
    console.log(div)

结果:

 索引取值

  var div = document.getElementsByClassName('c1')[0]
    console.log(div)

 用标签取值(getElementsByTagName),也可索引取值,同class  

var div = document.getElementsByTagName('div');
console.log(div);

 通过定义属性查找

    var div3 = document.getElementsByName('username'); // 通过input的name属性获取
    console.log(div3);

 间接查找

parentElement       父节点标签元素
children            所有子标签
firstElementChild       第一个子标签元素  (相当于children的索引0.)
lastElementChild        最后一个子标签元素 (children的最后一个值)
nextElementSibling      下一个兄弟标签元素   (同级标签的下面一个)
previousElementSibling    上一个兄弟标签元素     (同级标签的上面一个)

 

当用class查找的时候要索引,否则无法准确到取的具体值,但是id取值不用索引。

children也需要索引

<div class="div5">
    <ul class="u1">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</ul>
</div>

    var div = document.getElementsByClassName('div5')[0];
    console.log(div)
    var ul = div.children[0];
    console.log(ul)
 

节点操作

举例:动态创建一个img标签出来

    var img = document.createElement('img');
    //找到要放入div的位置
    var div = document.getElementById('d1');
    // 给img标签设置src属性
    img.src = '1234.png';
    img.alt='xixixi';
    //给标签设置属性的时候,只能给标签自带的属性添加,自定义属性不能通过点形式设置
    //img.username = 's1'//这个方式是不可以的
    //设置自定义属性用
    img.setAttribute('username','s1');
    console.log(img.getAttribute('username'));//取定义的username的值
    //移除username
    img.removeAttribute('username');
    console.log(img);

    //将img标签放到div里
    div.appendChild(img);

创建a链接出来

    // 1. 常见出来a标签
    var a = document.createElement('a');  // <a></a>

    // 2. 设置属性
    a.href = 'http://www.baidu.com';  // // <a href='http://www.baidu.com'></a>
    a.title = '这是a';

    // 3. 给a标签设置文本内容
    // a.innerText = '<h1>点我看美女</h1>';  // <a href='http://www.baidu.com'>点我看美女</a>
    a.innerHTML = '<h1>点我看美女</h1>'  // 识别html标签
    console.log(a);

    // 4. 把a放到div里面取
    var div = document.getElementById('d1');
    div.appendChild(a);