从零开始学前端:DOM、BOM、焦点事件 --- 今天你学习了吗?(JS:Day20)

news2024/11/24 3:31:27

从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)

复习:从零开始学前端:CSSOM视图模式 — 今天你学习了吗?(JS:Day19)

文章目录

  • 从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)
    • 前言
    • 第十五节课:DOM、BOM、焦点事件、键盘事件
      • 一、JS三大组成部分
      • 二、DOM方法
        • 1. childNodes
        • 2. children
        • 3.nodeType
        • 4. nodeName
        • 5. tagName
        • 6. firstChild
        • 7. parentNode
        • 8. offsetParent
        • 9. createElement/appendChild
        • 10. removeChild
        • 11. replaceChild
      • 三、BOM(browser object Model) 浏览器对象
        • 1.window对象
        • 2.Navigator 对象包含有关浏览器的信息
        • 3.Screen对象包含有关用户屏幕的信息
        • 4.Window Location
        • 5.History
        • 6.onblur 失去焦点
        • 7.键盘事件
        • 8.`e.keyCode` / `e.key` 具体按下某个键

前言

最近有点忙,又拉下了。

第十五节课:DOM、BOM、焦点事件、键盘事件

一、JS三大组成部分

  1. es (ECMAScript) 语法
  2. DOM 文档对象模型
  3. BOM 浏览器对象模型

DOM:是一个对象文档对象模型
1.操作标签节点
2.严格不专属于js

        var box = document.querySelector('#box');
        // childNodes获取到所有的子节点,包括文本节点。
        console.log(box.childNodes);
        // text节点  文本节点 :空格,任意的文字,换行,空白行
        // document.documentElement
        /* 
            节点:
                1.元素节点(ele) element
                2.text节点  文本节点 :空格,任意的文字,换行,空白行
                3.属性节点
                4.注释节点comment
        */

        // children:返回第一级子元素节点;
        console.log(box.children);

        // 元素节点的节点类型;
        console.log(box.childNodes[6].nodeType);

        // nodeName返回节点名称
        console.log(box.children[3].nodeName);
        // tagName返回节点名称 
        console.log(box.children[3].tagName);

        console.log(box.getAttribute('id')); // 值
        console.log(box.getAttributeNode('id')); //id 名 值
        console.log(box.getAttributeNode('name')); // null

        // 返回第一个节点
        console.log(box.firstChild);
        // 返回第一个元素节点       
        console.log(box.firstElementChild)
        // 返回最后一个节点
        console.log(box.lastChild);
        // 返回最后一个元素节点
        console.log(box.lastElementChild);

        // 兄弟节点
        console.log(box.nextSibling)

        // 兄弟元素节点
        console.log(box.nextElementSibling)

        // 找父节点
        console.log(box.parentNode)
        // 找父节点
        console.log(box.offsetParent)

        // 获取元素节点个数
        console.log(box.childElementCount);

效果:
在这里插入图片描述

二、DOM方法

1. childNodes

获取到所有的子节点,包括文本节点。

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        console.log(box.childNodes)
        // 操作子节点;带了s,返回集合。
        // 1. 返回
        //     01:text
        //     02: ul
        //     03: text
        // 解析空格text;

        // 注意:在低版本IE里面只会返回元素节点而不会返回无效的文本节点(除非有添加文本内容)。
        // 在低版本IE里面只会返回元素节点而不会返回无效的文本节点(除非有添加文本内容)。
        // 无效的文本节点:指空格或换行;
        // 在主流浏览器里面,把换行和空格都视为正常的文本节点,跟普通的文本没区别。
    </script>
</head>

<body>
    <div id="box">
        <div id="p1"></div>
    </div>
</body>

</html>

2. children

返回第一级子元素节点
box.children
返回一个类数组,类数组的取值操作:[ ]下标取值;
children是一个属性,不是一个方法,所以不用加()

3.nodeType

元素节点的节点类型

<div id="box">
    <div id='p1'></div>
    <div id='p2'></div>
    <!---->
</div>

var box = document.getElementById('box');
console.log( box.childNodes[0].nodeType )   //3
console.log( box.children[0].nodeType )  //1
//不同的节点,数据类型是不一样。比如:类数组与类组,类型不一样。
//百度找nodeType
元素节点的类型:1;
属性:2;
text文本内容:3;
注释:8;

4. nodeName

返回节点名称

console.log( box.children[0].nodeName );
<div id="box">
   <div id='p1'>123</div>
   <div id='p2'>123</div>
</div>
box.children[0].onclick = function(){
    alert( 123 )
}
//children为类数组,类数组通常有length的方法;

属于动态获取;

    只要里面孩子的个数变了,都能动态地反馈出来。

5. tagName

//与nodeName的区别 
console.log( box.childNodes[1].nodeName );  // document 能返回注释节点
console.log( box.childNodes[1].tagName );   // 返回undefined
 //区别:nodeName能返回各种各样的节点,但是tagName只能返回对象节点;

6. firstChild

//返回第一个子节点
//在主流浏览器返回子节点
//在低版本IE的情况下返回的是元素节点
console.log( box.firstChild );

7. parentNode

//返回父节点 , 没有兼容问题
console.log( box.parentNode );

8. offsetParent

div{width:300px; height:300px;background-color: #90f;}
div#box{position:absolute; }
p{background-color:#f0f;font-size:30px;}
<div id="box">
    <!---->
    <div id='p1'>123</div>
    <div id='p2'>123</div>
</div>
//返回定位父级
console.log( p2.offsetParent )

9. createElement/appendChild

创建元素与添加子节点,通常是结合起来使用的。
clone:

var cloneBox = box.cloneNode(); //有两个值,默认为false.
    false//代表的是浅复制,浅复制只复制节点本身,不复制子元素的内容,只复制标签本身。
    true//深度复制,深度复制里面有什么东西的话,JS里面也是要有(比如属性,事件,)。
document.body.appendChild( cloneBox );

10. removeChild

删除子节点(通过父级来杀,不能自杀)**

var wrap = document.getElementsByClassName('wrap');
box.removeChild( wrap[1] );
//如果有多个节点的话,先找到子节点之后再去找到父级

11. replaceChild

<div id="box">
    <div class='wrap'>wrap1</div>
    <div class='wrap'>wrap2</div>
    <div class='wrap'>wrap3</div>
    <div class='wrap'>wrap4</div>
</div>var wrap = document.getElementsByClassName('wrap')[1];
var p = document.createElement('p');
p.innerHTML = 'p0';
box.replaceChild( p , wrap );
//node.replaceChild(newnode,oldnode)

三、BOM(browser object Model) 浏览器对象

1.window对象

    /*
        浏览器对象模型:
        BOM browser object Model 提供方法操作浏览器的功能;
    */
    /*
        Screen 对象包含有关客户端显示屏幕的信息。
        History 对象包含用户(在浏览窗口中)访问过的URL。
        Location 对象包含有关当前URL的信息。
    */
    console.log(window.location);

    window.onblur = function () {
        console.log('切换到别的地方去了。')
    }
    window.onfocus = function () {
        console.log('又切换回来了。')
    

效果:
在这里插入图片描述
提示框

    //警告框经常用于确保用户可以得到某些信息。
    alert('提示文本!')
    //确认框用于使用户可以验证或者接收某些信息。
    confirm('文本')
    //提示框:经常用于提示用户在进入页面前输入某个值。
    prompt("文本2", "默认值")

效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Navigator 对象包含有关浏览器的信息

    console.log(navigator.appName)         
    console.log(navigator.cookieEnabled)    //返回浏览器是否启用cookie的布尔值

效果:
在这里插入图片描述

3.Screen对象包含有关用户屏幕的信息

    /*
        window 对象
            所有浏览器都支持 window 对象。它表示浏览器窗口。
            window.screen 对象在编写时可以不使用 window 这个前缀。
    */
    //  相关属性:
    console.log('可用宽度:' + screen.availWidth);  //1920
    /*
        screen.availHeight 可用屏幕高度
        属性返回访问者屏幕高度,以像素计,减去界面特性,比如窗口任务栏。
    */
    //  相关属性:
    console.log("可用高度:" + screen.availHeight); //1032

效果:
在这里插入图片描述

4.Window Location

//对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。
//Window Location Href
 //用中文的形式:会被传为unicode码
    console.log( location.href );//返回(当前页面的)整个 URL:
//Window Location Pathname
    console.log(location.pathname); //返回当前 URL 的路径名:

效果:
在这里插入图片描述

5.History

//Window Location Assign
<input type="button" value="Back" >
<input type="button" value="Forward">
var input = document.getElementsByTagName( 'input' );
input[0].onclick = function(){
    window.history.back()
}
input[1].onclick = function(){
    window.history.forward()
}

6.onblur 失去焦点

//页面切换,也可以获取光标或失去光标;
//当前页面不会被渲染;
//轮播会报错,因为切换到别的页面,页面不会渲染到,但是定时器还是会走。
var input = document.getElementsByTagName( 'input' )[0];
input.onfocus = function(){
    console.log( '获得焦点' );
}
input.onblur = function(){
    console.log( '失去焦点' )
}
//理论上是内容发生改变的时候才会触发;前提是得失去内容才能触发事件
input.onchange = function(){
    console.log( this.value );
}
//内容改变就会触发(能获取光标,),没有任何前提;
//H5新事件,不兼容低版本IE浏览器.
input.oninput = function(){
    console.log( this.value );
} 
//focus 聚焦于某个能获取焦点的对象;
//blur  让某个能获得焦点的对象失去焦点;
input.onblur = function(){
    this.focus();
}
input.focus = function(){
    this.blur();
}

7.键盘事件

//先后顺序:先down,再press,后:up;
input.onkeydown = function(){
    console.log( '键盘按下' )
}
input.onkeyup = function(){
    console.log( '键盘抬起' )
}
input.onkeypress = function(){
    console.log( '键盘按下事件' )
} 
/*
    onkeydown  键盘按下 (任何按键按下都会触发)
    onkeyup  键盘抬起(任何按键抬起都出触发)
    onkeypress  键盘按下事件 (只会相应字母键、数字键、符号键 / 不响应功能键F1等等 )
    onkeydown 与 onkeypress的区别:
    onkeypress
        这个事件在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。 
    onkeydown
        这个事件在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。
*/

8.e.keyCode / e.key 具体按下某个键

对应的属性:

input.onkeydown = function(e){
    console.log( '键盘按下' )
    console.dir( e )
}
<input type="text" id='input'>
input.onkeydown = function(e){
    if( e.keyCode ===116 ){ //116 F5键
        console.log( '按下了是F5键');
        e.preventDefault();//阻止默认事件,也就是阻止了刷新;
    }else{
        console.log( '按下了'+ e.key +'键');
        e.preventDefault();//阻止默认事件,也就是阻止了刷新;
    }
} 
input.onkeyup = function(){
    console.log( 'up:键盘抬起了!' );
}
input.onkeypress = function(){
    console.log( 'press:键盘按下了!' )
}
/*
    key与code都是返回对应的键:
        推荐使用key;
            1.形象( key本身就是为键; )
            2.code更智能
*/
/*
    组合键:
        ctrlkey 
        altkey
*/
//按下事件进行赋值:
input.onkeydown = function( e ){
    //同时按下Ctrl+alt+波浪符 ,弹出对应的内容
    if( e.ctrlKey && e.altKey ){
       this.value = ' hello wold! '
    }
}

预习:从零开始学前端:键盘事件、小球运动 — 今天你学习了吗?(JS:Day21)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java8 (jdk 1.8) 新特性——Stream ApI

在java8 中&#xff0c;有两个最重要的改变&#xff0c;一个就是之前了解的Lmbda java8 (jdk 1.8) 新特性——Lambda ,还有一个就是Stream Api 1. 什么是Stream API 简单来说就是一个类库&#xff0c;里边有一些方法方便我们对集合数据进行操作&#xff0c;就好像使用 SQL 语…

Windows cmd 命令及Linux 环境下导入导入mysql 数据库

文章目录一、背景二、Windows cmd 导入导出mysql 数据库1.导出数据库三种方式&#xff08;导出数据库时不需要连接数据库&#xff09;2. 操作步骤2.导入数据库三、linux 环境下导入导出数据库一、背景 最近在本机上安装了一个WMware 虚拟机&#xff0c;需要从本机&#xff08;…

从三层架构说起,谈谈对历史项目的小改造

项目背景说明 最近接手一个 “老” 项目的需求修改&#xff0c;项目整体基于 .net core 3.1 平台&#xff0c;以传统的三层架构为基础构建。了解需求后&#xff0c;逐步对原有项目框架进行大概的了解&#xff0c;主要是熟悉一些框架的开发规范&#xff0c;基本工具类库的使用&…

寒亭5.8万亩盐碱稻 国稻种芯·中国水稻节:山东潍坊插秧期

寒亭5.8万亩盐碱稻 国稻种芯中国水稻节&#xff1a;山东潍坊插秧期 新京报讯&#xff08;记者赵利新&#xff09;新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道&#xff…

MMRotate 全面升级,新增 BoxType 设计

引言&#xff1a;大大降低水平框检测器改旋转框检测器的难度 MMRotate 是一个基于 PyTorch 和 MMDetection 的开源旋转框目标检测工具箱。它将目标检测从水平框扩展到旋转框&#xff0c;为场景文字、遥感影像、自动驾驶等领域的应用打下了基础&#xff0c;为学术界和产业界提供…

瞄准镜-第12届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第82讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

数据结构——单链表

一.简介 上一篇文章&#xff0c;我们介绍了线性表中的顺序表。 而顺序表拥有一些缺陷 1.空间不够时需要增容&#xff0c;增容需要付出代价 2.为避免重复扩容&#xff0c;我们进行指数扩容&#xff0c;可能会造成空间浪费 3.顺序表从开始位置连续存储&#xff0c;插入删除数…

卡特尔世界杯来了,只喝精酿啤酒不玩望京扑克,其实也是一种缺失

北京时间2022年11月20日&#xff0c;卡特尔世界杯正式拉开了序幕&#xff0c;全球都进入了世界杯时间。世界杯的开幕&#xff0c;最高兴的还是球迷朋友&#xff0c;大家可以欢聚一堂&#xff0c;喝着精酿啤酒看着足球&#xff0c;那滋味别提多舒服了。 世界杯对于广大球迷来说&…

表的增删查改

目录 插入数据 基本查询 更新数据 清空数据 聚合函数 group by子句 内置函数 基本查询练习 多表查询 子查询 合并查询 表的内外连接 插入数据 单行—全列插入 如下图&#xff0c;全列插入可以省略要在哪些列插入&#xff01; 多行—指定列插入 如下图&#xff0…

安装 Red Hat Enterprise Linux 9.1 虚拟机

目录1. 官方下载链接与新闻2. 安装提示3. 系统安装步骤&#xff08;1&#xff09;进入系统引导界面&#xff08;2&#xff09;进入【系统语言选择】界面&#xff08;3&#xff09;进入【安装信息摘要】界面① 设置【root密码】② 设置【安装目的地】&#xff08;4&#xff09;进…

【python】使用python将多个视频合并、延长视频的时间

今天做知识分享的时候&#xff0c;最后保存的视频时长是58分钟&#xff0c;那么如何改变视频的时长&#xff0c;将视频时长改为一个小时呢&#xff1f; 下面提供3个方案&#xff1a; 方案1&#xff0c;重新录&#xff0c;很显然&#xff0c;不合理&#xff1b; 方案2&#xf…

蓝屏page_fault_in_nonpaged_area的解决办法

用户在操作电脑的过程中&#xff0c;难免会遇到蓝屏问题&#xff0c;最近就有用户遇到电脑蓝屏重启无限循环&#xff0c;提示代码page_fault_in_nonpaged_area&#xff0c;这要如何解决呢&#xff1f;下面就来看看详细的解决办法。 page_fault_in_nonpaged_area蓝屏代码解决方法…

【MySQL篇】第一篇——数据库基础

目录 什么是数据库 主流数据库 基本使用 MySQL安装 连接服务器 服务器管理 服务器&#xff0c;数据库&#xff0c;表关系 使用案例 创建数据库 使用数据库 创建数据库表 表中插入数据 查询表中的数据 数据逻辑存储 MySQL架构原理 MySQL整体逻辑架构 MySQL逻辑…

Eureka架构篇 - 服务发现

前言 从客户端与服务端两个角度概述一下Eureka服务发现的原理&#xff0c;如下&#xff1a; 客户端 依赖自动装配机制&#xff0c;客户端启动时就会从Eureka服务端全量获取服务实例的注册信息并缓存到本地。之后每隔30秒向Eureka服务端发起增量获取的请求&#xff0c;如果增…

云原生周刊 | 波音公司允许员工给开源项目做贡献

如果你要问谁对开源项目的贡献最小&#xff0c;那一定是保密等级很高的国防工业机构&#xff0c;但这个魔咒最近被波音公司给打破了。在最近的一次 Linux 基金会成员峰会 keynote 演讲中&#xff0c;波音公司提到他们会在 2022 年成立一个开源办公室&#xff0c;并且从即日起&a…

m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 经度纬度和高度来自GPS信号的中的GPGGA的数据。所以提取这三个信息主要是对GPGGA中的数据进行整理。GPGGA的数据格式如下所示&#xff1a; GPGGA是GPS数据输出格式语句&#xff0c;意思是…

9问502

一、502意味着什么 502 Bad Gateway是指错误网关&#xff0c;无效网关&#xff1b;在互联网中表示一种网络错误。表现在WEB浏览器中给出的页面反馈。它通常并不意味着上游服务器已关闭&#xff08;无响应网关/代理&#xff09; &#xff0c;而是上游服务器和网关/代理使用不一…

latex 模板使用技巧——参考文献篇

参考文献说明&#xff1a; 一、 常用参考文献类型 1、会议 &#xff08;INPROCEEDINGS&#xff09; 示例&#xff1a; INPROCEEDINGS{rcnn,title{Rich feature hierarchies for accurate object detection and semantic segmentation},author{Girshick, Ross and Donahue, J…

骨传导耳机是利用什么原理听歌?什么骨传导耳机好用

这几年来骨传导耳机的火热程度不言而喻&#xff0c;很多运动人士手上必有一款骨传导耳机&#xff0c;也随着骨传导耳机的兴起&#xff0c;越来越多小伙伴都加入了运动当中。当然&#xff0c;也有很多小伙伴是不知道骨传导耳机的&#xff0c;更不知道骨传导耳机有什么作用&#…

KESION(.NET版)安装方法

若是windows2008系统,访问xxxxxx.com - xxx sex videos free hd porn 资源和信息。 安装界面没有样式加载,请先编辑web.config 去掉 <defaultDocument> <files> <clear /> <add value"index.aspx" /> </files> </defaultDocume…