先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
} catch(e) {
// 跳过
}
}
throw new Error(‘您的系统或浏览器不支持MSXML!’); // 循环后抛出错误
}
OK,我们现在通过这个方法就可以拿到一个 xmlDom 对象了。
var xmlDom = createXMLDOM();
// 载入 XML 文件
// 1、加载XML字符串loadXML()
xmlDom.loadXML(‘Yu’);
alert(xmlDom.xml);
// 2、加载XML外部文件load()
xmlDom.load(‘text.xml’);
console.log(xmlDom.xml)
XML 和 XHTML 一样,都是通过 DOM 节点操作的。
var user = xmlDom.getElementsByTagName(‘user’)[0]
console.log(user.nodeType)
console.log(user.tagName)
console.log(user.firstChild.nodeValue)
DOM 不单单可以获取 XML 节点,也可以创建:
var email = xmlDom.createElement(email)
xmlDom.documentElement.appendChild(email)
// 为创建的节点添加内容
var emailText = xmlDom.createTextNode(‘react.dong.yu@gmail.com’)
email.appendChild(emailText)
同步及异步
=====
load() 方法是用于从服务器端载入 XML 的,并且限制在同一台服务器上的 XML 文件。那么在载入的时候有两种模式:同步和异步。
- 同步:就是在加载 XML 完成之前,代码不会继续执行,直到完全加载了 XML 再返回。好处就是简单、方便,坏处就是如果加载的数据停止响应或延迟太久,浏览器会一直堵塞从而造成假死状态。
xmlDom.async = false //设置同步,false
- 异步:就是在加载 XML 时,JavaScript 会把任务丢给浏览器内部后台处理,不会造成堵塞,但要配合 readystatechange 事件使用,所以,通常我们都使用异步方法。
xmlDom.async = true //设置异步,默认
通过异步加载,我们发现获取不到 XML 信息。原因是,它并没有完全加载 XML 就返回了,也就是说,在浏览器内部加载一点,返回一点,加载一点,返回一点。这个时候,我们需要判断是否完全加载,并且可以使用了,在进行获取输出。
XML DOM 中 readystatechange 事件
| 就绪状态 | 说明 |
| — | — |
| 1 | DOM正在加载 |
| 2 | DOM已经加载完数据 |
| 3 | DOM已经可以使用,但某些部分还无法访问 |
| 4 | DOM已经完全可以使用 |
var xmlDom = createXMLDOM()
xmlDom.async = true
xmlDom.onreadystatechange = function() {
if(xmlDom.readyState === 4) {
alert(xmlDom.xml)
}
}
xmlDom.load(‘test.xml’) // 放在后面重点体现异步的作用
1、可以通过 readyState 来了解事件的执行次数,将 load() 方法放到最后不会因为代码的顺序而导致没有加载。并且 load() 方法必须放在 onreadystatechange 之后,才能保证就绪状态变化时调用该事件处理程序,因为要先触发。
2、不能够使用this,不能够使用 IE 的事件处理函数,原因是 ActiveX 控件为了预防安全性问题
DOM2 中的 XML
===========
IE可以实现了对XML字符串或XML文件的读取,其他浏览器也各自实现了对XML处理功能。DOM2级在 document.implementaion
中引入了 createDocument()
方法。其他浏览器都支持。
1、创建XMLDOM对象
var xmlDom = document.implementation.createDocument(‘’,‘root’,null); // 创建
var user = xmlDom.createElement(‘user’); // 创建user元素
xmlDom.getElementsByTagName(‘root’)[0].appendChild(user); // 添加到root下
var value = xmlDom.createTextNode(‘Yu’); // 创建文本
xmlDom.getElementsByTagName(‘user’)[0].appendChild(value); // 添加到user下
alert(xmlDom.getElementsByTagName(‘root’)[0].tagName);
alert(xmlDom.getElementsByTagName(‘user’)[0].tagName);
alert(xmlDom.getElementsByTagName(‘user’)[0].firstChild.nodeValue);
1、DOM2中不支持 loadXML() 方法,所以,无法简易的直接创建 XML 字符串,所以,只能采用以上的做法。
2、createDocument() 方法需要传递三个参数,命名空间,根标签名和文档声明,由于 JavaScript 管理命名空间比较困难,所以留空即可。文档声明一般根本用不到,直接null即可。命名空间和文档声明留空,表示创建XMLDOM对象不需要命名空间和文档声明。
2、DOMParser 类型
由于 DOM2 没有 loadXML() 方法直接解析 XML 字符串,所以提供了 DOMParser 类型来创建 XML DOM 对象。IE9、Safari、Chrome 和 Opera 都支持这个类型。
var xmlParser = new DOMParser(); // 创建DOMParser对象
var xmlStr = ‘Yu’; // 创建DOMParser对象
var xmlDom = xmlParser.parseFromString(xmlStr, ‘text/xml’); // 创建XML DOM对象
alert(xmlDom.getElementsByTagName(‘user’)[0].tagName)
XML DOM 对象是通过DOMParser对象中的parseFromString方法来创建的,两个参数:XML字符串和内容类型text/xml。
3、XML Serializer 类型
由于DOM2没有序列化XML的属性,所以提供了XMLSerializer类型来帮助序列化XML字符串。IE9、Safari、Chrome和Opera都支持这个类型。
var serializer = new XMLSerializer(); // 创建XMLSerializer对象
var xml = serializer.serializeToString(xmlDom); // 序列化XML
alert(xml);
4、解析错误
在 DOM2 级处理 XML 发生错误时,并没有提供特有的对象来捕获错误,而是直接生成另一个错误的XML文档,通过这个文档可以获取错误信息。
var errors = xmlDom.getElementsByTagName(‘parsererror’);
if (errors.length > 0) {
throw new Error(‘XML格式有误:’ + errors[0].textContent);
}
PS:errors[0].firstChild.nodeValue也可以使用errors[0].textContent来代替。
5、跨浏览器处理XML
如果要实现跨浏览器就要思考几个问题:
1、load()只有IE、Firefox、Opera支持,所以无法跨浏览器;
2、获取XMLDOM对象顺序问题,先判断先进的DOM3,然后再去判断落后的IE;
3、针对不同的IE和DOM2级要使用不同的序列化;
4、针对不同的报错进行不同的报错机制。
//首先,我们需要跨浏览器获取XML DOM
function getXMLDOM(xmlStr) {
var xmlDom = null;
if (typeof window.DOMParser != ‘undefined’) { // W3C
xmlDom = (new DOMParser()).parseFromString(xmlStr, ‘text/xml’);
var errors = xmlDom.getElementsByTagName(‘parsererror’);
if (errors.length > 0) {
throw new Error(‘XML解析错误:’ + errors[0].firstChild.nodeValue);
}
} else if (typeof window.ActiveXObject != ‘undefined’) { // IE
var version = [
‘MSXML2.DOMDocument.6.0’,
‘MSXML2.DOMDocument.3.0’,
‘MSXML2.DOMDocument’
];
for (var i = 0; i < version.length; i ++) {
try {
xmlDom = new ActiveXObject(version[i]);
} catch (e) {
//跳过
}
}
xmlDom.loadXML(xmlStr);
if (xmlDom.parseError != 0) {
throw new Error(‘XML解析错误:’ + xmlDom.parseError.reason);
}
} else {
throw new Error(‘您所使用的系统或浏览器不支持XML DOM!’);
}
return xmlDom;
}
// 其次,我们还必须跨浏览器序列化XML
function serializeXML(xmlDom) {
var xml = ‘’;
if (typeof XMLSerializer != ‘undefined’) {
xml = (new XMLSerializer()).serializeToString(xmlDom);
} else if (typeof xmlDom.xml != ‘undefined’) {
xml = xmlDom.xml;
} else {
throw new Error(‘无法解析XML!’);
}
return xml;
}
由于兼容性序列化过程有一定的差异,可能返回的结果字符串可能会有一些不同。之于load()加载XML文件则因为只有部分浏览器支持而无法跨浏览器。
XPath
=====
XPath 是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用。但是,DOM3级以前的标准并没有就XPath做出规范;直到DOM3才首次推荐到标准规范行列。大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath。
IE中的 XPath
selectSingleNode() // 获取单一节点
selectNode() // 获取节点集合
selectSingleNode() 方法接受一个 XPath 模式(也就是查找路径)找到匹配的第一个节点并将它返回,没有则返回null。
XPath 查找手段,就是路径查找,结构树查找
var node = xmlDom.selectSingleNode(‘root/user’)
alert(node.xml)
alert(node.firstChild.nodeValue)
上下文节点: 我们通过 xmlDom 这个对象实例调用犯法,而xmlDom这个对象实例其实就是一个上下文节点,这个节点指针指向的是根,也就是root元素之前。那么如果我们把这个指针指向user元素之前,那么结果就会有所变化。
// 通过xmlDom,并且使用root/user的路径
ES6
-
列举常用的ES6特性:
-
箭头函数需要注意哪些地方?
-
let、const、var
-
拓展:var方式定义的变量有什么样的bug?
-
Set数据结构
-
拓展:数组去重的方法
-
箭头函数this的指向。
-
手写ES6 class继承。
微信小程序
-
简单描述一下微信小程序的相关文件类型?
-
你是怎么封装微信小程序的数据请求?
-
有哪些参数传值的方法?
-
你使用过哪些方法,来提高微信小程序的应用速度?
-
小程序和原生App哪个好?
-
简述微信小程序原理?
-
分析微信小程序的优劣势
-
怎么解决小程序的异步请求问题?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
信小程序的相关文件类型?
-
你是怎么封装微信小程序的数据请求?
-
有哪些参数传值的方法?
-
你使用过哪些方法,来提高微信小程序的应用速度?
-
小程序和原生App哪个好?
-
简述微信小程序原理?
-
分析微信小程序的优劣势
-
怎么解决小程序的异步请求问题?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-F2rFus8x-1713416567184)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!