JavaScript Web APIs2(3),2024年最新字节跳动前端三面容易挂吗

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

}

案例:

-仿新浪注册页面

-开关灯案例

排他思想


如果有同一组元素,我们想要某一个元素实现某种样式, 需要用到循环的排他思想算法:

  1. 所有元素全部清除样式(干掉其他人)

  2. 给当前元素设置样式 (留下我自己)

  3. 注意顺序不能颠倒,首先干掉其他人,再设置自己

案例:百度换肤、表格隔行变色、表单全选取消全选案例

自定义属性的操作


获取属性值

element.属性 获取属性值。

element.getAttribute(‘属性’);

区别:

element.属性 获取内置属性值(元素本身自带的属性)

element.getAttribute(‘属性’); 主要获得自定义的属性 (标准) 我们程序员自定义的属性

设置属性值

element.属性 = ‘值’ 设置内置属性值。

element.setAttribute(‘属性’, ‘值’);

区别:

element.属性 设置内置属性值

element.setAttribute(‘属性’); 主要设置自定义的属性 (标准)

移除属性

element.removeAttribute(‘属性’);

应用:tab 栏切换

H5自定义属性


自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。

自定义属性获取是通过getAttribute(‘属性’) 获取。

但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性。

H5给我们新增了自定义属性:

设置H5自定义属性

H5规定自定义属性data-开头做为属性名并且赋值。

比如

或者使用 JS 设置

element.setAttribute(‘data-index’, 2)

获取H5自定义属性

兼容性获取 element.getAttribute(‘data-index’);

H5新增 element.dataset.index 或者 element.dataset[‘index’] ie 11才开始支持

h5新增的获取自定义属性的方法 它只能获取data-开头的

dataset 是一个集合里面存放了所有以data开头的自定义属性

如果自定义属性里面有多个-链接的单词,我们获取的时候采取 驼峰命名法

console.log(div.dataset.listName);

console.log(div.dataset[‘listName’]);

节点操作


1. 父级节点

node.parentNode

parentNode 属性可返回某节点的父节点,注意是最近的一个父节点

如果指定的节点没有父节点则返回 null

2. 子节点

parentNode.childNodes(标准)

parentNode.childNodes 返回包含指定节点的子节点的集合,该集合为即时更新的集合。

注意:返回值里面包含了所有的子节点,包括元素节点,文本节点等。

如果只想要获得里面的元素节点,则需要专门处理。 所以我们一般不提倡使用childNodes

获取元素节点:

var ul = document. querySelector(‘ul’);

for(var i = 0; i < ul.childNodes.length;i++) {

if (ul.childNodes[i].nodeType == 1) {    // ul.childNodes[i] 是元素节点

console.log(ul.childNodes[i]);}

}

相当于:

console.log(ul.children);

parentNode.children(非标准

parentNode.children 是一个只读属性,返回所有的子元素节点。它只返回子元素节点,其余节点不返回

parentNode.firstChild

firstChild 返回第一个子节点,找不到则返回null。同样,也是包含所有的节点。

parentNode.lastChild

lastChild 返回最后一个子节点,找不到则返回null。同样,也是包含所有的节点。

parentNode.firstElementChild

firstElementChild 返回第一个子元素节点,找不到则返回null

parentNode.lastElementChild

lastElementChild 返回最后一个子元素节点,找不到则返回null。

实际开发中,firstChild 和 lastChild 包含其他节点,操作不方便,而 firstElementChild 和 lastElementChild 又有兼容性问题,那么我们如何获取第一个子元素节点或最后一个子元素节点呢?

解决方案:

如果想要第一个子元素节点,可以使用 parentNode.chilren[0]

如果想要最后一个子元素节点,可以使用 parentNode.chilren[parentNode.chilren.length - 1]

案例:下拉菜单

兄弟节点

node.nextSibling

nextSibling 返回当前元素的下一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。

node.previousSibling

previousSibling 返回当前元素上一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。

node.nextElementSibling

nextElementSibling 返回当前元素下一个兄弟元素节点,找不到则返回null。

node.previousElementSibling

previousElementSibling 返回当前元素上一个兄弟元素节点,找不到则返回null。

code.nextElementSibing与previousElementSibling存在兼容性问题

创建节点

document.createElement(‘tagName’)

ocument.createElement() 方法创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。

node.appendChild(child)

node.appendChild() 方法将一个节点添加到指定父节点的子节点列表末尾。类似于 CSS 里面的 after 伪元素。

node.insertBefore(child, 指定元素)

node.insertBefore() 方法将一个节点添加到父节点的指定子节点前面。类似于 CSS 里面的 before 伪元素。

案例:简单版发布留言案例

删除节点

node.removeChild(child)

node.removeChild() 方法从 DOM 中删除一个子节点,返回删除的节点

案例:删除留言案例

复制节点(克隆节点)

node.cloneNode()

node.cloneNode() 方法返回调用该方法的节点的一个副本。 也称为克隆节点/拷贝节点

注意:

如果括号参数为空或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。

如果括号参数为 true ,则是深度拷贝,会复制节点本身以及里面所有的子节点。

案例:动态生成表格

三种动态创建元素区别

document.write()

element.innerHTML

document.createElement()

document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘

innerHTML 是将内容写入某个 DOM 节点,不会导致页面全部重绘

innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂

createElement() 创建多个元素效率稍低一点点,但是结构更清晰

总结:不同浏览器下,innerHTML 效率要比 creatElement 高

注册事件


给元素添加事件,称为注册事件或者绑定事件。

注册事件有两种方式:传统方式和方法监听注册方式

传统注册方式

利用 on 开头的事件 onclick

<button οnclick=“alert(‘hi~’)”>

btn.onclick = function() {}

特点: 注册事件的唯一性

同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数

方法监听注册方式

eventTarget.addEventListener(type, listener[, useCapture])

w3c 标准 推荐方式

addEventListener() 它是一个方法

IE9 之前的 IE 不支持此方法,可使用 attachEvent() 代替

特点:同一个元素同一个事件可以注册多个监听器

按注册顺序依次执行

eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。

该方法接收三个参数:

type:事件类型字符串,比如 click 、mouseover ,注意这里不要带 on

listener:事件处理函数,事件发生时,会调用该监听函数

useCapture:可选参数,是一个布尔值,默认是 false可以选择是冒泡还是捕获

删除事件的方式

传统注册方式

eventTarget.onclick = null;

方法监听注册方式

eventTarget.removeEventListener(type, listener[, useCapture]);

eventTarget.detachEvent(eventNameWithOn, callback);

事件流


事件流描述的是从页面中接收事件的顺序。

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。

比如我们给一个div 注册了点击事件

DOM 事件流分为3个阶段:

1捕获阶段

2当前目标阶段

3冒泡阶段

事件冒泡: IE 最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点的过程。

事件捕获: 网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到到最具体的元素接收的过程。

JS 代码中只能执行捕获或者冒泡其中的一个阶段。

onclick 和 attachEvent 只能得到冒泡阶段。

addEventListener(type, listener[, useCapture])第三个参数如果是 true,表示在事件捕获阶段调用事件处理程序;如果是 false(不写默认就是false),表示在事件冒泡阶段调用事件处理程序。

实际开发中我们很少使用事件捕获,我们更关注事件冒泡。

有些事件是没有冒泡的,比如 onblur、onfocus、onmouseenter、onmouseleave

事件对象


eventTarget.onclick = function(event) {

// 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt

}

算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。

写在最后

最后,对所以做Java的朋友提几点建议,也是我的个人心得:

  1. 疯狂编程

  2. 学习效果可视化

  3. 写博客

  4. 阅读优秀代码

  5. 心态调整

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。

写在最后

最后,对所以做Java的朋友提几点建议,也是我的个人心得:

  1. 疯狂编程

  2. 学习效果可视化

  3. 写博客

  4. 阅读优秀代码

  5. 心态调整

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-wgJtHqGp-1713678591408)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值