首页 > 其他分享 >前端开发 5 BOM操作与DOM操作

前端开发 5 BOM操作与DOM操作

时间:2022-12-06 20:12:05浏览次数:41  
标签:jQuery 浏览器 DOM 对象 标签 let BOM document 前端开发

今日内容详细

目录

BOM操作

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

ECMAScript是JavaScript的核心,但在web使用JavaScript,那么BOM(浏览器对象模型)才是真正的核心。

BOM的核心对象是window,它表示浏览器的一个实例

在浏览器中,window对象既是JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。也就是说,在网页中定义的任何一个变量、对象和函数以window作为其Global对象。

一些基本常见的Windows方法:
	window.innnerHeight - 浏览器窗口的内部高度
	window.innerWidh - 浏览器窗口的内部宽度
	window.open() - 打开新窗口
	window.close() - 关闭当前窗口
	window.open('https://www.sogo.com/','','width=800px,left=200px')

window的子对象

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

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

screeen对象

屏幕对象 不常用
一些属性:
screen.availWidth - 可用的屏幕宽度
screen.availHeight - 可用的屏幕高度

history对象

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

location对象

window.location对象用于获得当前页面的地址(URL),并把浏览器重定向到新的页面。
常用属性和方法:
location.href  // 获取当前页面所在的网址(URL)
location.href='URL'  // 跳转到指定页面
location.reload()  // 重新加载页面

弹出框

可以在JavaScript中创建三种消息框:警告框、确认框、提示框
警告框
警告框用于确保用户可以得到某些信息
当警告框出现后 用户需要点击确认按钮才能继续进行操作

alert("你看到了吗?");
确认框
确认框用于使用户可以验证或者接受某些信息
当确认框出现后 用户需要点击确定或者取消按钮才能继续进行操作
如果用户点击确认 那么返回值为true 如果用户点击取消 那么返回值为false

confirm("你确定了吗?");
提示框
提示框经常用于提示用户在进入页面前输入某个值
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

prompt("请在下方输入","你的答案")
计时相关
通过使用JavaScript 我们可以在一定时间间隔之后来执行代码 而不是在函数被调用后立即执行 我们称之为计时事件

let t = setTimeout(showMsg, 3000)  // 3000毫秒之后执行函数
clearTimeout(t)  // 取消任务
let s = setInterval(func, 3000)  // 每隔3000毫秒执行一次函数
clearInterval(s)  // 取消任务

DOM操作

DOM(Document Object Model) 是一套对文档的内容进行抽象和概念化的方法, 通过它可以访问HTML文档的所有元素
当网页被加载时,浏览器会创建页面的文档对象模型

HTML DOM 模型被构造为对象的树。

img

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

·文档节点(document对象):代表整个文档
·元素节点(element 对象):代表一个元素(标签)
·文本节点(text对象):代表元素(标签)中的文本
·属性节点(attribute对象):代表一个属性,元素(标签)才有属性
·注释是注释节点(comment对象) 
JavaScript 可以通过DOM创建动态的 HTML:

·JavaScript 能够改变页面中的所有 HTML 元素
·JavaScript 能够改变页面中的所有 HTML 属性
·JavaScript 能够改变页面中的所有 CSS 样式
·JavaScript 能够对页面中的所有事件做出反应

查找标签

"""
1.js中变量名的命名风格推荐是驼峰体
2.js代码查找到的标签如果需要反复使用可以用变量接受规律 xxxEle
"""
document.getElementById('d1')  根据ID获取一个标签
	结果就是标签对象本身
document.getElementsByClassName('c1')  根据class属性获取
	结果是数组里面含有多个标签对象
document.getElementsByTagName('span')  根据标签名获取标签合集
	结果是数组里面含有多个标签对象

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

操作节点

// js代码创建一个标签
let aEle = document.createElement('a')

// js代码操作标签属性
aEle.href = 'http://www.lsmpx.com/'  只能添加默认的属性
setAttribute()  兼容默认属性和自定义属性
getAttribute("age")

// js代码操作标签文本
aEle.innerText = '这个很攒劲!'

// js代码查找div标签并将a追加到div内部
let divEle = document.getElementsByTagName('div')[0]
divEle.appendChild(aEle)

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

增加的节点放在某个节点的前边
somenode.insertBefore(newnode,某个节点);

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);

.innerText    获取标签内部所有的文本内容
.innerText = '文本'    替换/设置标签内部的文本(不识别标签语法)
.innerHTML    获取标签内部所有的标签包含文本
.innerHTML = '文本'    替换/设置标签内部的文本(识别标签语法)

// 删除节点
通过父元素调用该方法删除要删除的元素
somenode.removeAttribute("age")

// 替换节点
somenode.replaceChild(newnode,要替换的节点)

获取值操作

1.针对用户输入的和用户选择标签
	标签对象.value
2.针对用户上传的文件数据
	标签对象.files			fileList [文件对象、文件对象、文件对象...]
	标签对象.files[0]		 文件对象

class的操作

js操作标签class属性

className  获取所有样式类名(字符串)

标签对象.classList.remove(cls)  删除指定类
标签对象.classList.add(cls)  添加类
标签对象.classList.contains(cls)  存在返回true,否则返回
标签对象.falseclassList.toggle(cls)  存在就删除,否则添加

css操作

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

事件

事件可以简单的理解为通过js代码给html标签绑定一些自定义的功能

常见事件
	onclick			当用户点击某个对象时调用的
事件句柄
	onfocus			元素获得焦点
    
	onblur			元素失去焦点

	onchange		域的内容被改变
	......    

绑定事件的多种方式
    <!--绑定事件的方式1-->
    <button onclick="showMsg()">快按我</button>
    <!--绑定事件的方式2-->
    <input type="button" value="快快快" id="d1">

        <script>
            function showMsg() {
                let msg = prompt('你确定要这样吗?');
                console.log(msg)
            }

            let inputEle = document.getElementById('d1');
            inputEle.onclick = function () {
                alert('谁在那里点我!!!')
            }
        </script>

事件函数中的this关键字
	this指代的就是当前被操作的标签对象本身
	如果事件函数内有多层嵌套那么最好在一开始用变量存储一下防止后续变化
    
onload方法
	XXX.onload 等待XXX加载完毕之后再执行后面的代码

事件实战案例

<input type="text" value="游戏机" id="d1">

<script>
        let inputEle = document.getElementById('d1')
        inputEle.onfocus = function () {
            this.value = ''
        }
        inputEle.onblur = function () {
            this.value = '下次再来哟!'
        }
</script>


    <p>username:
        <input type="text" id="d1">
        <span style="color: red"></span>
    </p>
    <p>password:
        <input type="text" id="d2">
        <span style="color: red"></span>
    </p>
    <button id="suBtn">提交</button>

    <script>
        // 1.查找提交按钮的标签
        subEle = document.getElementById('suBtn')
        // 2.给按钮标签绑定点击事件
        subEle.onclick = function (){
            // 3.查找获取用户输入的标签并获取数据
            let userNameEle = document.getElementById('d1')
            let passWordEle = document.getElementById('d2')
            if(userNameEle.value === 'jason'){
                userNameEle.nextElementSibling.innerText = '用户名不能是Jason'
            }
            if(passWordEle.value === '123'){
                passWordEle.nextElementSibling.innerText = '密码不能是123'
            }
        }
    </script>
    
    
省:
<select name="" id="d1">

</select>

市:
<select name="" id="d2">

</select>
<script>
    let data = {
        "河北": ["廊坊市", "邯郸市"],
        "北京": ["朝阳区", "海淀区"],
        "山东": ["威海市", "烟台市"],
        "安徽": ["芜湖市", "合肥市"],
        "上海": ["浦东新区", "静安区"]
    }
    // 提前查找好省和市的select标签
    let proSeEle = document.getElementById('d1');
    let citySeEle = document.getElementById('d2');
    // 1.获取所有的省信息
    for (let pro in data) {
        // 2.创建option标签
        let proOpEle = document.createElement('option');
        // 3.添加文本及属性
        proOpEle.innerText = pro;
        proOpEle.setAttribute('value', pro);
        // 4.将创建好的option标签添加到省下拉框中
        proSeEle.appendChild(proOpEle)
    }
    // 5.给省标签绑定文本域变化事件 onchange
    proSeEle.onchange = function () {
        citySeEle.innerHTML = '';  // 每次操作市之前清空市数据
        // 6.获取用户选择的省信息 根据省获取市信息
        let targetProData = this.value;
        let cityDataList = data[targetProData];
        // 7.循环获取每一个市信息 创建option标签 添加到市下拉框中
        for (let i = 0; i < cityDataList.length; i++) {
            let cityOpEle = document.createElement('option');
            cityOpEle.innerText = cityDataList[i];
            cityOpEle.setAttribute('value', cityDataList[i]);
            citySeEle.appendChild(cityOpEle)
        }
    }
</script>

jQuery类库

"""
IE浏览器:前端针对IE有时候需要单独再编写一份代码
"""
jQuery是一个轻量级的、兼容多浏览器的JavaScript库。
jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。
口号:Write less, do more		写的更少做的更多

1.加载速度快
2.选择器更多更好用
3.一行代码走天下
4.支持ajax请求(重点)
5.兼容多浏览器
6.丰富的第三方的插件 例如:树形菜单、日期控件、图片切换插件、弹出窗口等等
    
准备工作
	1.下载核心文件到本地引入(没有网络也可以使用)
    	<script src="jQuery3.6.js"></script>
 	2.CDN网络资源加载(必须有网络才可以使用)
    	https://www.bootcdn.cn/
            
https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js				未压缩的
   https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js				压缩之后的  
    
什么是CDN
	内容分布网络

jQuery导入之后需要使用关键字才可以使用
	默认的关键字就是jQuery但是不好输入 >>>: $

jQuery封装了JS代码 让编写更简单 到那有时候JS代码更快

js代码与jQuery代码对比
    let pEle = document.getElementsByTagName('p')[0]
    undefined
    pEle.style.color = 'red'
    'red'
    pEle.nextElementSibling.style.color = 'green'

  $('p').first().css('color','yellow').next().css('color','blue')

标签对象与jQuery对象

jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。
虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。
1.不同的对象能够调用的方法是不同的:
	在编写代码的时候一定要看清楚手上是什么对象
2.两者可以互相转换:
一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$:

	var $variable = jQuery对像
	var variable = DOM对象
	$variable[0]//jQuery对象转成DOM对象

拿上面那个例子举例,jQuery对象和DOM对象的使用:

	$("#i1").html();//jQuery对象可以使用jQuery的方法
	$("#i1")[0].innerHTML;// DOM对象使用DOM的方法

标签:jQuery,浏览器,DOM,对象,标签,let,BOM,document,前端开发
From: https://www.cnblogs.com/qian-yf/p/16960376.html

相关文章

  • hdu3622 Bomb Game--2-sat & 二分
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=3622​​题意:一个二维坐标系,n行数据,每行两个坐标算作一组,从n组跳出n点,画圆,半径一样,要求不能相交,可以相切,求最大半......
  • JS的BOM与DOM操作
    BOM与DOMBOM(BrowserObjectModel)是指浏览器对象模型,它使JavaScript有能力与浏览器进行“对话”。DOM(DocumentObjectModel)是指文档对象模型,通过它,可以访问HTML文档......
  • BOM操作 DOM操作 操作标签
    今日内容总结BOM操作(BrowserObjetModel)BOM是指浏览器对象模型它使JavaScript有能力与浏览器进行'对话'1.window.open() 打开一个网页 window.open('网址',......
  • JS之BOM/DOM和jquery类库简介
    目录BOM操作DOM操作查找标签操作节点获取值操作class与css操作事件事件实战案例jQuery类库标签对象与jQuery对象BOM操作JavaScript分为ECMAScript,DOM,BOMBOM(BrowserObj......
  • Vue的keep-alive、虚拟DOM的作用、diff算法
    一、keep-alive作用:keep-alive标签是vue的内置标签,可在组件切换过程中将状态保留在内存中,防止DOM重复渲染。标签属性:include:符合条件的组件会被缓存,exclude:符合条件的组......
  • 前端第五课---BOM操作与DOM操作与jQuery类库简介
    昨日内容回顾JavaScript简介1.发展史2.编程语言3.注释语法 4.引入方式 变量与常量var\let\const基本数据类型数值类型 Number字符类型 String布尔......
  • day37 操作bom对象,dom对象
    操作bom对象bom:浏览器对象模型window对象代表浏览器窗口 //window.alert(22)window.innerHeight//595window.innerWidth//131window.innerWidth//322......
  • 前端开发npm start的引导过程
    以react初始化项目为例:[email protected]:geektcp/react-init.git package.json的内容如下:{"name":"react-init","version":"0.1.0","private":......
  • web前端开发:JavaScript网页脚本语言
    目录JavaScript网页脚本语言一、JavaScript简介1.注释语法2.引入JS的方式(1)head内script标签内编写(2)head内script标签src属性引入外部JS资源(3)body内最底部通过script标签src......
  • 前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循
    前端开发之JavaScript目录前端开发之JavaScript一、JavaScript简介二、JS基础三、变量与常量四、基本数据类型1、数值类型2、字符类型3、布尔类型五、特殊数据类型1、nu......