当前位置:首页 > 科技  > 软件

30 个有用的 JavaScript 代码片段(上)

来源: 责编: 时间:2023-10-10 18:31:39 341观看
导读在过去的几个月里,我在开发离线浏览器工具时,我自己反复搜索我的JavaScript 文件以检索旧的代码片段。因此,我认为使用以下常用 JavaScript 方法的编译列表作为参考可能会让那些与我有类似用例的其他人受益。我总共整理

在过去的几个月里,我在开发离线浏览器工具时,我自己反复搜索我的JavaScript 文件以检索旧的代码片段。6fo28资讯网——每日最新资讯28at.com

6fo28资讯网——每日最新资讯28at.com

显然微分了一个无限数。具有不同颜色的重叠驾驶路线对于任何观看者来说都更容易比较和对比地图可视化上显示的各种路线。因此,动态生成不同的颜色是必要的,可以通过以下方式实现:6fo28资讯网——每日最新资讯28at.com

function generateRandomHexColor() {    let colorGenerated="#" + (Math.random() * 0xfffff * 1000000).toString(16).slice(0, 6);    if(colorGenerated !== "#0000ff" && colorGenerated !== "#ff0000") {      return colorGenerated;    }    colorGenerated="#" + (Math.random() * 0xfffff * 1000000).toString(16).slice(0, 6);}

6. 突出显示 JSON 语法

对于地图服务提供商返回的每条路线,我都合并了路线 JSON 数据输出的导出功能。因此,为了区分 JSON 对象中的 String、Float、Integer、Boolean 等对象类型,我选择对其进行颜色编码,如下所示:6fo28资讯网——每日最新资讯28at.com

6fo28资讯网——每日最新资讯28at.com

上述效果可以通过CSS和JavaScript来实现。6fo28资讯网——每日最新资讯28at.com

JavaScript 代码:6fo28资讯网——每日最新资讯28at.com

function syntaxHighlight(json) {    json = json.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");    return json.replace(/("(//u[a-zA-Z0-9]{4}|//[^u]|[^//"])*"(/s*:)?|/b(true|false|null)/b|-?/d+(?:/./d*)?(?:[eE][+/-]?/d+)?)/g, function (match) {        var cls = "number";        if (/^"/.test(match)) {            if (/:$/.test(match)) {                cls = "key";            } else {                cls = "string";            }        } else if (/true|false/.test(match)) {            cls = "boolean";        } else if (/null/.test(match)) {            cls = "null";        }        return "<span class='" + cls + "'>" + match + "</span>";    });}

CSS代码:6fo28资讯网——每日最新资讯28at.com

.string {   color: green; }.number {   color: darkorange; }.boolean {   color: blue; }.null {   color: magenta; }.key {   color: red; }

7. 通知未保存的更改

window.addEventListener('beforeunload', (event) => {  event.preventDefault();  event.returnValue = '';});

6fo28资讯网——每日最新资讯28at.com

上面的代码片段对于用户在输入字段中输入了未保存的数据并且在页面卸载时会丢失的情况特别有用。在上图中,用户上传多个图像文件后,浏览器会提示用户是否已保存图像输出以防止数据丢失。6fo28资讯网——每日最新资讯28at.com

8. 异步上传多个文件

function readFileAsB64(file) {    return new Promise((resolve,reject) => {        let fileredr = new FileReader();        fileredr.onload = () => resolve([fileredr.result, file.name]);        fileredr.onerror = (err) => reject(err);        fileredr.readAsDataURL(file);    });}var uploadFile=document.getElementById('uploadFile'); // input[type='file']uploadFile.addEventListener('change', (ev) => {      if (!window.FileReader) {        alert('Your browser does not support HTML5 "FileReader" function required to open a file.');    } else {      let filesArr=ev.target.files;      let fileReaders=[];      for(let f in filesArr) {        if(!isNaN(f)) fileReaders.push(readFileAsB64(filesArr[f]))      }      Promise.all(fileReaders).then((outputArrs) => {          for(let o in outputArrs) {            if(!isNaN(o)) {              let fileArr=outputArrs[o]; // [fileredr.result, file.name]              /* TO DO LOGIC HERE */              let image = new Image();              image.src = fileArr[0];              image.title = fileArr[1];              image.height = 100;              document.body.appendChild(image);            }          }      });    }});

上面的代码片段确保在浏览器继续执行注释后的代码逻辑之前,所有上传的图像文件都已编码为 Base64 字符串(fileredr.readAsDataURL(file);):6fo28资讯网——每日最新资讯28at.com

/* TO DO LOGIC HERE */

6fo28资讯网——每日最新资讯28at.com

9. insertAdjacentHTML — 开始之前 | 开始之后 | 前言 | 尾声6fo28资讯网——每日最新资讯28at.com

回顾第 1) 点中的屏幕截图,可以通过 insertAdjacentHTML(<position>,<HTML String>) 将 HTML 附加到元素:6fo28资讯网——每日最新资讯28at.com

<Element>.insertAdjacentHTML('beforeend'|'afterbegin'|'beforeend'|'afterend', <HTML String>);

下面是每个选项相对于 <Element>(即 <p></p>)所指的位置的说明:6fo28资讯网——每日最新资讯28at.com

<!-- beforebegin --><p>  <!-- afterbegin -->  foo  <!-- beforeend --></p><!-- afterend -->

由于在第 1 点)中,目标是附加额外的表行 (<tr></tr>),因此使用了 beforeend 位置。6fo28资讯网——每日最新资讯28at.com

10. 检查 JSON 字符串是否有效

由于我在业余时间创建的大多数离线浏览器实用程序都要求用户上传数据文件,其中一些文件需要为 JSON 格式,因此这是一种对 JSON 文件进行数据格式验证检查的简单直接的方法是:6fo28资讯网——每日最新资讯28at.com

function isValidJSON(str) {  try {    JSON.parse(str);    return true;  } catch (e) {    return false;  }}// returns a Boolean

11. 将原始 HTML 字符串编码为 Unicode 实体

function encodeHTMLChars(rawStr) {  return rawStr.replace(/[/u00A0-/u9999<>/&]/g, ((i) => `&#${i.charCodeAt(0)};`));}

要将文本 <img> 显示到 HTML 页面上,必须按如下方式对字符串进行编码:6fo28资讯网——每日最新资讯28at.com

var inputHTMLStr='<img>';var encodedHTMLStr=encodeHTMLChars(inputHTMLStr);console.log(encodedHTMLStr); // Output: <img>

当需要在网页上显示 HTML 代码片段时,这通常会派上用场,因为其原始形式(即“<img>”)会被浏览器自动解释为 HTML DOM 元素,而不是用于显示的原始文本。6fo28资讯网——每日最新资讯28at.com

12. 将 XML 转换为 JSON

2 个最未被充分利用的 JavaScript API 包括:DOMParser() 和 DOMParser.parseFromString()6fo28资讯网——每日最新资讯28at.com

尽管 xml-js 和 xml2js 等 npm 包很容易获得,但该逻辑可以通过纯 JavaScript 实现,如下所示:6fo28资讯网——每日最新资讯28at.com

function convertXMLtoJSON(xmlObj) { // adapted from https://davidwalsh.name/convert-xml-json    var obj = {};    if (xmlObj.nodeType == 1) {        if (xmlObj.attributes.length > 0) {            obj['@attributes'] = {};            for (var j = 0; j < xmlObj.attributes.length; j++) {                var attribute = xmlObj.attributes.item(j);                obj['@attributes'][attribute.nodeName] = attribute.nodeValue;            }        }    } else if (xmlObj.nodeType == 3) {        obj = xmlObj.nodeValue;    }    // Iterate through all child nodes    // Use recursive to assign nested nodes    if (xmlObj.hasChildNodes()) {        for(var i = 0; i < xmlObj.childNodes.length; i++) {            var item = xmlObj.childNodes.item(i);            var nodeName = item.nodeName;            if (typeof(obj[nodeName])==='undefined') {                obj[nodeName] = convertXMLtoJSON(item);            } else {                if (typeof(obj[nodeName].push)==='undefined') {                    var old = obj[nodeName];                    obj[nodeName] = [];                    obj[nodeName].push(old);                }                obj[nodeName].push(convertXMLtoJSON(item));            }        }    }    return obj;}/* USAGE: Sample xmlText */var xmlText = '<bookstore><book>' +'<title>Everyday Italian</title>' +'<author>Giada De Laurentiis</author>' +'<year>2005</year>' +'</book></bookstore>';var xmlParser=new DOMParser();var xmlObj=xmlParser.parseFromString(xmlText, 'text/xml');var jsnotallow=convertXMLtoJSON(xmlObj);console.log(jsonObj);// Output: {"bookstore":{"book":{"title":{"#text":"Everyday Italian"},"author":{"#text":"Giada De Laurentiis"},"year":{"#text":"2005"}}}}

声明:上述代码逻辑最初由 David Walsh 在 Convert XML to JSON 中实现。6fo28资讯网——每日最新资讯28at.com

我认为有用且值得分享,所以就把它加载进来了。6fo28资讯网——每日最新资讯28at.com

总结

以上就是我今天这篇文章想与你分享的30个有用的JavaScript 代码片段中的前面12个代码段,剩下的18个将在下篇文章中与你分享。6fo28资讯网——每日最新资讯28at.com

今天内容到此结束,希望对你有所帮助,最后,感谢你的阅读。6fo28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12727-0.html30 个有用的 JavaScript 代码片段(上)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: TIOBE 发布 10 月编程语言排行榜:Java 占比下跌 3.92% 成第四,C++ 跃升第三

下一篇: 从 ELK/EFK 到 PLG,是时候换个日志框架了

标签:
  • 热门焦点
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top