首页 > 其他分享 >JS基础学习(二)操作BOM和DOM

JS基础学习(二)操作BOM和DOM

时间:2022-08-28 12:46:25浏览次数:42  
标签:浏览器 DOM JS BOM test navigator document 节点

浏览器对象

JavaScript可以获取浏览器提供的很多对象,并进行操作。

window

window对象不但充当全局作用域,而且表示浏览器窗口。
window对象有innerWidth和innerHeight属性,可以获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。

表示浏览器的信息,最常用的属性包括:
navigator.appName:浏览器名称;
navigator.appVersion:浏览器版本;
navigator.language:浏览器设置的语言;
navigator.platform:操作系统类型;
navigator.userAgent:浏览器设定的User-Agent字符串
对应的,还有一个outerWidth和outerHeight属性,可以获取浏览器窗口的整个宽高。
请注意,navigator的信息可以很容易地被用户修改,所以JavaScript读取的值不一定是正确的。\n

console.log('appName = ' + navigator.appName);
console.log('appVersion = ' + navigator.appVersion);
console.log('language = ' + navigator.language);
console.log('platform = ' + navigator.platform);
console.log('userAgent = ' + navigator.userAgent);

screen

screen对象表示屏幕的信息,常用的属性有:

  1. screen.width:屏幕宽度,以像素为单位;
  2. screen.height:屏幕高度,以像素为单位;
  3. screen.colorDepth:返回颜色位数,如8、16、24。

location

对象表示当前页面的URL信息。例如,一个完整的URL:
可以用location.href获取。要获得URL各个部分的值,可以这么写:

  • 如果要重新加载当前页面,调用location.reload()方法非常方便。
console.log('appName = ' + navigator.appName);
console.log('appVersion = ' + navigator.appVersion);
console.log('language = ' + navigator.language);
console.log('platform = ' + navigator.platform);
console.log('userAgent = ' + navigator.userAgent);

history

history对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()或forward (),相当于用户点击了浏览器的“后退”或“前进”按钮。
这个对象属于历史遗留对象,对于现代Web页面来说,由于大量使用AJAX和页面交互,简单粗暴地调用history.back()可能会让用户感到非常愤怒。
新手开始设计Web页面时喜欢在登录页登录成功时调用history.back(),试图回到登录前的页面。这是一种错误的方法。

history.back();
history.forward();

DOM对象

document对象表示当前页面。由于HTML在浏览器中以DOM形式表示为树形结构,document对象就是整个DOM树的根节点。

DOM对象title属性:
document的title属性是从HTML文档中的xxx读取的,但是可以动态改变:
document.title = '努力学习JavaScript!';
用document对象提供的getElementById()和getElementsByTagName()可以按ID获得一个DOM节点和按Tag名称获得一组DOM节点!
JavaScript可以通过document.cookie读取到当前页面的Cookie:
由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM。

始终记住DOM是一个树形结构。操作一个DOM节点实际上就是这么几个操作:

更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点。

  1. 查找dom节点
// 返回ID为'test'的节点:
var test = document.getElementById('test');

// 先定位ID为'test-table'的节点,再返回其内部所有tr节点:
var trs = document.getElementById('test-table').getElementsByTagName('tr');

// 先定位ID为'test-div'的节点,再返回其内部所有class包含red的节点:
var reds = document.getElementById('test-div').getElementsByClassName('red');

// 获取节点test下的所有直属子节点:
var cs = test.children;

// 获取节点test下第一个、最后一个子节点:
var first = test.firstElementChild;
var last = test.lastElementChild;
  1. 更新dom节点
    image
  2. 插入dom节点
    更多的时候我们会从零创建一个新的节点,然后插入到指定位置:
var
    list = document.getElementById('list'),
    haskell = document.createElement('p');
haskell.id = 'haskell';
haskell.innerText = 'Haskell';
list.appendChild(haskell);

动态创建一个节点然后添加到DOM树中,可以实现很多功能。举个例子,
下面的代码动态创建了一个style节点,
然后把它添加到节点的末尾,这样就动态地给文档添加了新的CSS定义:--让p标签变红.
var d = document.createElement('style');
d.setAttribute('type', 'text/css');
d.innerHTML = 'p { color: red }';
document.getElementsByTagName('head')[0].appendChild(d);
  1. 删除dom
    删除一个DOM节点就比插入要容易得多。
    要删除一个节点,首先要获得该节点本身以及它的父节点,然后,调用父节点的removeChild把自己删掉:
// 拿到待删除节点:
var self = document.getElementById('to-be-removed');
// 拿到父节点:
var parent = self.parentElement;
// 删除:
var removed = parent.removeChild(self);
removed === self; // true
注意到删除后的节点虽然不在文档树中了,但其实它还在内存中,可以随时再次被添加到别的位置。

标签:浏览器,DOM,JS,BOM,test,navigator,document,节点
From: https://www.cnblogs.com/qianxilin/p/16632426.html

相关文章

  • 关于vue的css样式对js动态添加的dom节点不生效问题的解决方法
    一、问题描述开发的时候免不了有时候需要向某个节点appendchild,添加子节点,但是如果是在vue中,就会发现通过操作dom的appendchild方式添加节点会出现样式对这些新增的节点......
  • Vue3+vite+js 配置别名@报错
    Vue3+vite+js配置别名@报错vue3项目中配置vite.config.js时使用path模块报错,一直警告找不大到path模块原因:path模块是node.js内置的功能,但是node.js本身并不支持ts解决......
  • 论文笔记-Multi-Adversarial Domain Adaptation
    摘要文章提出了一种多对抗域自适应(MADAMulti-AdversarialDomainAdaptation)方法,它能够捕捉多模式结构以基于多个域鉴别器实现不同数据的细粒度对齐。ps:其实就......
  • JS基础学习(一)函数和对象
    函数定义方式1.第一种functionabs(x){if(x>=0){returnx;}else{return-x;}}2.第二种变量赋值的形式,注意最后有一个分号";......
  • NC20185 [JSOI2010]缓存交换
    题目原题地址:[JSOI2010]缓存交换题目编号:NC20185题目类型:堆、贪心时间限制:C/C++1秒,其他语言2秒空间限制:C/C++262144K,其他语言524288K1.题目大意Cache容量以及......
  • js无限debugger学习总结
    静态js代码debugger1.几千个含有debugger的script标签<script>debugger;</script><script>debugger;</script><script>debugger;</script>.........
  • Python random 的使用
    导入importrandom 随机数生成//用来生成[a,b]之间的随意整数,包括两个边界值。print(random.randint(0,9))//用来随机生成一个0到1之间的浮点数,包括零。0.15790......
  • Python 报错:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char
    报错内容:json.decoder.JSONDecodeError:Expectingvalue:line1column1(char0) 报错代码:print(res.json()) 报错原因:打印请求返回值报错该接口返回值......
  • 如何给shadow DOM下的元素添加样式
    一、问题描述项目中在dom结构里遇到了shadow-DOM(open),如下是一个表格组件,主要感觉滚动条有点low,需要自定义但发现自己写的样式渗透不进去╮(╯▽╰)╭ShadowDOMSh......
  • identity4 系列————纯js客户端案例篇[四]
    前言前面已经解释了两个案例了,通信原理其实已经很清楚了,那么纯js客户端是怎么处理的呢?正文直接贴例子哈。https://github.com/IdentityServer/IdentityServer4/tree/ma......