关键词:
在本文中列出了21个值得收藏的Javascript技巧,在实际工作中,如果能适当运用,则大大提高工作效率。
1? Javascript数组转换为CSV格式
首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件。则我们可以使用如下的小技巧,代码如下:
`var` `fruits = [``'apple'``,` `'peaches'``,` `'oranges'``,` `'mangoes'``];`
`var` `str = fruits.valueOf();`
输出:apple,peaches,oranges,mangoes
其中,valueOf()方法会将Javascript数组转变为逗号隔开的字符串。要注意的是,如果想不使用逗号分割,比如用|号分割,则请使用join方法,如下:
`var` `fruits = [``'apple'``,` `'peaches'``,` `'oranges'``,` `'mangoes'``];`
`var` `str = fruits.join(``"|"``);`
输出: apple|peaches|oranges|mangoes
2 将CSV格式重新转换回Javscript数组
那么如何将一个CSV格式的字符串转变回Javascript数组呢?可以使用split()方法,就可以使用任何指定的字符去分隔,代码如下:
`var` `str =` `"apple, peaches, oranges, mangoes"``;`
`var` `fruitsArray = str.split(``","``);`
输出 fruitsArray[0]: apple
3 根据索引移除数组中的某个元素
假如需要从Javascript数组中移除某个元素,可以使用splice方法,该方法将根据传入参数n,移除数组中移除第n个元素(Javascript数组中从第0位开始计算)。
`function` `removeByIndex(arr, index) `
`arr.splice(index, 1);`
``
`test =` `new` `Array();`
`test[0] =` `'Apple'``;`
`test[1] =` `'Ball'``;`
`test[2] =` `'Cat'``;`
`test[3] =` `'Dog'``;`
`alert(``"Array before removing elements: "``+test);`
`removeByIndex(test, 2);`
`alert(``"Array after removing elements: "``+test);`
则最后输出的为Apple,Ball,Dog
4 根据元素的值移除数组元素中的值
下面这个技巧是很实用的,是根据给定的值去删除数组中的元素,代码如下:
`function` `removeByValue(arr, val) `
`for``(``var` `i=0; i<arr.length; i++) `
`if``(arr[i] == val) `
`arr.splice(i, 1);`
`break``;`
``
``
``
`var` `somearray = [``"mon"``,` `"tue"``,` `"wed"``,` `"thur"``]`
`removeByValue(somearray,` `"tue"``);`
`//somearray 将会有的元素是 "mon", "wed", "thur"`
当然,更好的方式是使用prototype的方法去实现,如下代码:
`Array.prototype.removeByValue =` `function``(val) `
`for``(``var` `i=0; i<``this``.length; i++) `
`if``(``this``[i] == val) `
`this``.splice(i, 1);`
`break``;`
``
``
``
`//..`
`var` `somearray = [``"mon"``,` `"tue"``,` `"wed"``,` `"thur"``]`
`somearray.removeByValue(``"tue"``);`
5 通过字符串指定的方式动态调用某个方法
有的时候,需要在运行时,动态调用某个已经存在的方法,并为其传入参数。这个如何实现呢?下面的代码可以:
`var` `strFun =` `"someFunction"``;` `//someFunction 为已经定义的方法名`
`var` `strParam =` `"this is the parameter"``;` `//要传入方法的参数`
`var` `fn = window[strFun];`
`//调用方法传入参数`
`fn(strParam);`
6 产生1到N的随机数
`var` `random = Math.floor(Math.random() * N + 1);`
`//产生1到10之间的随机数`
`var` `random = Math.floor(Math.random() * 10 + 1);`
`//产生1到100之间的随机数`
`var` `random = Math.floor(Math.random() * 100 + 1);`
7 捕捉浏览器关闭的事件
我们经常希望在用户关闭浏览器的时候,提示用户要保存尚未保存的东西,则下面的这个Javascript技巧是十分有用的,代码如下:
`<script language=``"javascript"``>`
`function` `fnUnloadHandler() `
`alert(``"Unload event.. Do something to invalidate users session.."``);`
``
`</script>`
`<body onbeforeunload=``"fnUnloadHandler()"``>`
`………`
`</body>`
就是编写onbeforeunload()事件的代码即可
8 ?检查是否按了回退键
同样,可以检查用户是否按了回退键,代码如下:
`window.onbeforeunload =` `function``() `
`return` `"You work will be lost."``;`
`;`
9? 检查表单数据是否改变
有的时候,需要检查用户是否修改了一个表单中的内容,则可以使用下面的技巧,其中如果修改了表单的内容则返回true,没修改表单的内容则返回false。代码如下:
`function` `formIsDirty(form) `
`for` `(``var` `i = 0; i < form.elements.length; i++) `
`var` `element = form.elements[i];`
`var` `type = element.type;`
`if` `(type ==` `"checkbox"` `|| type ==` `"radio"``) `
`if` `(element.checked != element.defaultChecked) `
`return` `true``;`
``
``
`else` `if` `(type ==` `"hidden"` `|| type ==` `"password"` `||`
`type ==` `"text"` `|| type ==` `"textarea"``) `
`if` `(element.value != element.defaultValue) `
`return` `true``;`
``
``
`else` `if` `(type ==` `"select-one"` `|| type ==` `"select-multiple"``) `
`for` `(``var` `j = 0; j < element.options.length; j++) `
`if` `(element.options[j].selected !=`
`element.options[j].defaultSelected) `
`return` `true``;`
``
``
``
``
`return` `false``;`
``
`window.onbeforeunload =` `function``(e) `
`e = e || window.event;?`
`if` `(formIsDirty(document.forms[``"someForm"``])) `
`// IE 和 Firefox`
`if` `(e) `
`e.returnValue =` `"You have unsaved changes."``;`
``
`// Safari 浏览器`
`return` `"You have unsaved changes."``;`
``
`;`
10? 完全禁止使用后退键
下面的技巧放在页面中,则可以防止用户点后退键,这在一些情况下是需要的。代码如下:
`<SCRIPT type=``"text/javascript"``>`
`window.history.forward();`
`function` `noBack() window.history.forward(); `
`</SCRIPT>`
`</HEAD>`
`<BODY onload=``"noBack();"`
`onpageshow=``"if (event.persisted) noBack();"` `onunload=``""``>`
11 删除用户多选框中选择的项目
下面提供的技巧,是当用户在下拉框多选项目的时候,当点删除的时候,可以一次删除它们,代码如下:
`function` `selectBoxRemove(sourceID) `
`//获得listbox的id`
`var` `src = document.getElementById(sourceID);`
`//循环listbox`
`for``(``var` `count= src.options.length-1; count >= 0; count--) `
`//如果找到要删除的选项,则删除`
`if``(src.options[count].selected ==` `true``) `
`try` ``
`src.remove(count,` `null``);`
`` `catch``(error) `
`src.remove(count);`
``
``
``
``
12? Listbox中的全选和非全选
如果对于指定的listbox,下面的方法可以根据用户的需要,传入true或false,分别代表是全选listbox中的所有项目还是非全选所有项目,代码如下:
`function` `listboxSelectDeselect(listID, isSelect) `
`var` `listbox = document.getElementById(listID);`
`for``(``var` `count=0; count < listbox.options.length; count++) `
`listbox.options[count].selected = isSelect;`
``
`?`
13 在Listbox中项目的上下移动
下面的代码,给出了在一个listbox中如何上下移动项目
`function` `listbox_move(listID, direction) `
`var` `listbox = document.getElementById(listID);`
`var` `selIndex = listbox.selectedIndex;`
`if``(-1 == selIndex) `
`alert(``"Please select an option to move."``);`
`return``;`
``
`var` `increment = -1;`
`if``(direction ==` `'up'``)`
`increment = -1;`
`else`
`increment = 1;`
`if``((selIndex + increment) < 0 ||`
`(selIndex + increment) > (listbox.options.length-1)) `
`return``;`
``
`var` `selValue = listbox.options[selIndex].value;`
`var` `selText = listbox.options[selIndex].text;`
`listbox.options[selIndex].value = listbox.options[selIndex + increment].value`
`listbox.options[selIndex].text = listbox.options[selIndex + increment].text`
`listbox.options[selIndex + increment].value = selValue;`
`listbox.options[selIndex + increment].text = selText;`
`listbox.selectedIndex = selIndex + increment;`
``
`//..`
`//..`
`listbox_move(``'countryList'``,` `'up'``);` `//move up the selected option`
`listbox_move(``'countryList'``,` `'down'``);` `//move down the selected option`
14 在两个不同的Listbox中移动项目
如果在两个不同的Listbox中,经常需要在左边的一个Listbox中移动项目到另外一个Listbox中去,下面是相关代码:
`function` `listbox_moveacross(sourceID, destID) `
`var` `src = document.getElementById(sourceID);`
`var` `dest = document.getElementById(destID);`
`for``(``var` `count=0; count < src.options.length; count++) `
`if``(src.options[count].selected ==` `true``) `
`var` `option = src.options[count];`
`var` `newOption = document.createElement(``"option"``);`
`newOption.value = option.value;`
`newOption.text = option.text;`
`newOption.selected =` `true``;`
`try` ``
`dest.add(newOption,` `null``);` `//Standard`
`src.remove(count,` `null``);`
```catch``(error) `
`dest.add(newOption);` `// IE only`
`src.remove(count);`
``
`count--;`
``
``
``
`//..`
`//..`
`listbox_moveacross(``'countryList'``,` `'selectedCountryList'``);`
15 快速初始化Javscript数组
下面的方法,给出了一种快速初始化Javscript数组的方法,代码如下:
`var` `numbers = [];`
`for``(``var` `i=1; numbers.push(i++)<100;);`
`//numbers = [0,1,2,3 ... 100]`
使用的是数组的push方法
16 截取指定位数的小数
如果要截取小数后的指定位数,可以使用toFixed方法,比如:
`var num = 2.443242342;`
`alert(num.toFixed(2));`
而使用toPrecision(x)则提供指定位数的精度,这里的x是全部的位数,如:
`num = 500.2349;`
`result = num.toPrecision(4);` `//输出500.2`
17 检查字符串中是否包含其他字符串
下面的代码中,可以实现检查某个字符串中是否包含其他字符串。代码如下:
`if` `(!Array.prototype.indexOf) `
`Array.prototype.indexOf =` `function``(obj, start) `
`for` `(``var` `i = (start || 0), j =` `this``.length; i < j; i++) `
`if` `(``this``[i] === obj) ` `return` `i; `
``
`return` `-1;`
``
``
`if` `(!String.prototype.contains) `
`String.prototype.contains =` `function` `(arg) `
`return` `!!~``this``.indexOf(arg);`
`;`
``
在上面的代码中重写了indexOf方法并定义了contains方法,使用的方法如下:
`var` `hay =` `"a quick brown fox jumps over lazy dog"``;`
`var` `needle =` `"jumps"``;`
`alert(hay.contains(needle));`
18? 去掉Javscript数组中的重复元素
下面的代码可以去掉Javascript数组中的重复元素,如下:
`function` `removeDuplicates(arr) `
`var` `temp = ;`
`for` `(``var` `i = 0; i < arr.length; i++)`
`temp[arr[i]] =` `true``;`
`var` `r = [];`
`for` `(``var` `k` `in` `temp)`
`r.push(k);`
`return` `r;`
``
`//用法`
`var` `fruits = [``'apple'``,` `'orange'``,` `'peach'``,` `'apple'``,` `'strawberry'``,` `'orange'``];`
`var` `uniquefruits = removeDuplicates(fruits);`
`//输出 uniquefruits ['apple', 'orange', 'peach', 'strawberry'];`
19? 去掉String中的多余空格
下面的代码会为String增加一个trim()方法,代码如下:
`if` `(!String.prototype.trim) `
`String.prototype.trim=``function``() `
`return` `this``.replace(/^s+|s+$/g,` `''``);`
`;`
``
`//用法`
`var` `str =` `"? some string??? "``;`
`str.trim();`
`//输出 str = "some string"`
20 Javascript中的重定向
在Javascript中,可以实现重定向,方法如下:
`window.location.href = <a href=``"[http://viralpatel.net](http://viralpatel.net/)"``>[http://viralpatel.net](http://viralpatel.net/)</a>;`
21 对URL进行编码
有的时候,需要对URL中的传递的进行编码,方法如下:
`var` `myOtherUrl =`
`"[http://example.com/index.html?url=](http://example.com/index.html?url=)"` `+ encodeURIComponent(myUrl);`
原文链接:https://www.jianshu.com/p/937...
10个值得收藏的chatgpt辅助编程技巧(代码片段)
在我们开始之前,你必须先了解编程语言,然后才能相信ChatGPT抛给你的任何东西。我必须明确这一点,因为许多误入歧途的绵羊被告知ChatGPT是新的圣杯,开发人员将被淘汰。推荐:用NSDT场景设计器快速搭建3D... 查看详情
开挂了!这5个word技巧真的是超级实用,值得收藏!
在实际工作中,一些小技巧往往是提高我们工作效率的重要因素,今天给大家分享5个实用的Word技巧,让你的工作效率翻倍。 1、快速选中图形如何快速删除文档中的图形呢?点击开始——编辑——选择——选择对象,之后再... 查看详情
javascript之爆肝汇总万字长文❤值得收藏(代码片段)
目录一、JavaScript简单入门1.1.一门客户端脚本语言1.2.JavaScript发展史1.3.JavaScript优势1.4.JavaScript引用1.5.JavaScript输出的几种方式1.6.JavaScript有哪些关键字1.7.JavaScript注释1.8.JavaScript常见标识符有哪些1.9.JavaScript常见HTML事件有哪些1.10.Jav... 查看详情
收藏喜+1!值得使用的100个python小技巧
目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手。你可以用它来完成很多任务,比如数据科学、机器学习、Web开发、脚本编写、自动化等。下... 查看详情
java8stream的这些开发技巧,你值得好好收藏(代码片段)
????????关注后回复 “进群” ,拉你进程序员交流群????????作者丨因为热爱所以坚持ing来源丨苏三说技术如果有些朋友以前没有使用过java8stream这种链式编程方式做开发,想学习一下。如果有些朋友只学习了一部分用法... 查看详情
15个pythonic的代码示例(值得收藏)(代码片段)
01.变量交换Badtmp=aa=bb=tmpPythonica,b=b,a02.列表推导Badmy_list=[]foriinrange(10):my_list.append(i*2)Pythonicmy_list=[i*2foriinrange(10)]03.单行表达式虽然列表推导式由于其简洁性及表达性,被广受推崇。但是有许多可以写成单行的表达式,并不是好的... 查看详情
速度收藏20个常用的python技巧,太赞啦(代码片段)
Python的可读性和简单性是其广受欢迎的两大原因,本文介绍20个常用的Python技巧来提高代码的可读性,并能帮助你节省大量时间,下面的技巧将在你的日常编码练习中非常实用。1.字符串反转使用Python切片反转字符串... 查看详情
推荐3个特别实用的python模块,值得收藏(代码片段)
大家好,今天给大家介绍3个特别好用的Python模块,知道的人可能不多,但是特别的好用。PsutilPendulumPyfigletPsutilPython当中的Psutil模块是个跨平台库,它能够轻松获取系统运行的进程和系统利用率,包括CPU、内存... 查看详情
阿里的35个java代码优化细节,值得收藏!(代码片段)
点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识转自:程序员追风 www.jianshu.com/p/6e472304b5ac前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的ÿ... 查看详情
作为python开发者,这21个linux命令值得去学习(代码片段)
作为Python程序开发人员,因工作的需求,有时我们也需要学习一下Linux命令,掌握这些命令,工作上会事半功倍,提供工作效率。内容较多,建议收藏、关注、喜欢点赞支持。文末有技术交流群,欢迎... 查看详情
js常用代码片段-127个常用罗列-值得收藏(代码片段)
1、all如果数组所有元素满足函数条件,则返回true。调用时,如果省略第二个参数,则默认传递布尔值。constall=(arr,fn=Boolean)=>arr.every(fn);all([4,2,3],x=>x>1);//trueall([1,2,3]);//true2、allEqual判断数组中的元 查看详情
41个web开发者必须收藏的javascript实用技巧
1.将彻底屏蔽鼠标右键oncontextmenu=”window.event.returnValue=false”<tableborderoncontextmenu=return(false)><td>no</table>可用于Table2.取消选取、防止复制<bodyonselectstart=”returnfalse”>3.JS不允许粘贴onpa 查看详情
值得收藏面试会用到的十个常用的数组方法js实现(代码片段)
【手撕代码系列】之十个常用的数组方法JS实现(一)🚀通俗易懂的实现方式,帮助我们认识相应的方法📚收藏本系列,基础进阶两不误🎉本系列持续更新,欢迎查看线上地址写在前面代码实现系... 查看详情
建议收藏17个xml布局小技巧(代码片段)
前言我们开发时接触最多的就是xml布局了,还记得我们写Android的第一个HelloWorld吗,就是通过activity_main.xml显示出来的。虽然xml写的很多,而且也没有什么技术难度,但是,这也往往是我们最容易忽略的地方... 查看详情
原来java注解只是个标记,没什么本领,一文精通,值得收藏!(代码片段)
前言java里有个神奇的存在,注解,就是那个天天@别人的家伙,它到底是何方神圣啊?请先给二当家的来个一键三连,然后接着耐心的读下去吧,多谢。本文由二当家的白帽子https://le-yi.blog.csdn.net/博客... 查看详情
原来java注解只是个标记,没什么本领,一文精通,值得收藏!(代码片段)
前言java里有个神奇的存在,注解,就是那个天天@别人的家伙,它到底是何方神圣啊?请先给二当家的来个一键三连,然后接着耐心的读下去吧,多谢。本文由二当家的白帽子https://le-yi.blog.csdn.net/博客... 查看详情
这28个值得收藏的shell脚本能让你每天摸鱼近7个小时!(代码片段)
前言:在日常工作中,但凡你要跟服务器打交道,一定离不开的神器便是shell脚本,shell脚本可以极大的提高工程师的工作效率,避免一些认为因素导致的手误。那么今天圈圈就给大家分享28个shell脚本,希... 查看详情
干货5个ps平面设计值得收藏的设计工具技巧
【干货】5个PS平面设计值得收藏的设计工具技巧很多小伙伴从小白学PS学了大半年,恐怕还对这款软件不温不火的,平常的一些操作也是中规中矩,非常的木讷,其实啊,很多时候我们找的素材不是恰如其好,你换个小技巧,没... 查看详情