你可能不知道的前端小技巧

孙据
• 阅读 2565

这篇文章主要记录一些我在开发工作中踩过的一些坑或者新学到的一些知识。主要分成‘事件’,‘浏览器调试小技巧’,‘其他‘三部分。
==============================一.事件===========================
1.先来看一个有趣的问题。

=======这是html=======

<button onclick="onclick1()">按钮1</button>
<button onclick="onclick()">按钮2</button>
<button onclick="click()">按钮3</button>
========这是js部分=======
function onclick1() {
    console.log('onclick1...');
}
function onclick() {
    console.log('onclick...');
}
function click() {
    console.log('click...');
}

分别点击这三个按钮,猜猜会是什么结果。
答案揭晓:点击按钮1,会正常输出onclick1... 点击按钮2,会报错Uncaught RangeError: Maximum call stack size exceeded。栈溢出了。 点击按钮3,不会报错,也没有任何反应。
所以,如果要给DOM绑定onclick事件,函数名千万别叫click和onclick。当然,如果你用addEventListener来绑定的话就不会存在这个问题了。

2.介绍一组很有用的事件。compositionstart, compositionupdate, compositionend.用来监听中文输入法。顾名思义:一个用来监听开始,一个用来监听更新,一个用来监听结束。如果输入的都是英文不会触发此事件,输入拼音时会触发。
我介绍这个的目的并不是简单的介绍这个事件,而是这里有个小坑。我们都知道,事件监听常用的两种方式,一种是直接给DOM加属性,比如onclick,onblur.另一种是用addEventListener来绑定事件。但是这组事件就很特殊。他们不能使用oncompositionstart,oncompositionupdate,oncompositionend来直接写在DOM中。实测不会生效。只能通过addEventListener来进行绑定。
===========================二.浏览器调试小技巧========================
3.用debugger来代替在文件中打断点的操作。当我们想在某处打断点的时候,往往会去浏览器中先找到这个文件,然后再找到具体哪一行。其实用debugger可以完全替代这个麻烦的操作。只需要在你想让代码停下的地方写一句debugger即可。

4.打条件断点,比如我们想在一个for循环里打断点,我只想看第五次循环时各变量的值,如果我只是在那打个断点的话,每次循环都会停下。那我怎么能解决这个麻烦的问题呢。有两个方法。一:用debugger,只需要在代码中写if (i ==5 ) debugger; 二: 在浏览器中打条件断点。步骤如下图所示:你可能不知道的前端小技巧你可能不知道的前端小技巧你可能不知道的前端小技巧输入完条件之后按回车键。最后会出现一个黄色断点如下图所示。
你可能不知道的前端小技巧

5.用$_来表示上一次的控制台结果。我们经常在控制台写一些简单的测试代码。当需要用到上一次的运行结果时,往往需要再将之前的表达式复制一遍。$_可以完美解决这个问题。
=============================三.其他=====================================
6.0/0结果是NaN。以前学C++时,碰到number/0这样分母为0的情况,都会加try catch来处理。直到有一天我发现,在js中分母为0不会抛出异常,而会得到NaN的结果。

7.行内元素设置rotate无效,需要设置成display:inline-block.有一次我试图给span标签设置旋转角度,发现怎么都不成功。后来查阅资料发现,inline元素设置rotate无效。

8.用data- 给DOM扩展属性。有时候我们需要在节点上存储信息,在js中获取,(我以前干过把信息存为id或title)但是这样违反了id和title本来的作用。H5提供了新的方法,data-XXX。可以供我们自定义,在存储时这样:<div data-name='hison'></div>在js中获取时用div.getAttribute('data-name'),或者用jQuery:$(div).data('name')

9.最快捷的数组求最大值方法:

let arr = [1,2,3,5,5,6,3,4];
let max = Math.max(...arr);

10.如何实现点击任意地方选中某个区域中的文本。通常我们要选中网页中的一段文本,需要双击才可以选中。但有时为了交互体验更好,要做成点击一下即可选中某块区域中的文本。再点击一下即可对所选区域进行编辑。主要用到window.getSelection方法和range的一些方法。

<div id="box">
    <span>这是一段文字</span>
</div>
<button onclick="selectText()">点我选中文字</button>
<script>
if (window.getSelection) {
        //创建一个范围
        var range = document.createRange();
        // 选择一个node放入该范围
        range.selectNode(document.getElementById('box'));
        // 把div变成和input一样可以编辑
        document.getElementById('box').setAttribute('contenteditable',true);
        // 移除掉之前选择好的片段
        window.getSelection().removeAllRanges();
        // 把新建的片段加入到selection中。
        window.getSelection().addRange(range);
    }
</script>

PS:觉得还可以?给点个赞吧!

点赞
收藏
评论区
推荐文章
Souleigh ✨ Souleigh ✨
4年前
你可能不知道的 Create React App 的一些技巧
在本文中,我们将探讨提供的鲜为人知但非常有用的功能。让我们开始吧!在HTTPS而不是HTTP上提供应用程序有时我们需要在HTTPS上测试我们的应用程序,以在部署到生产之前检查所有API是否正常工作。Createreactapp提供了一种简单的方法来做到这一点。.env在您的项目文件夹中创建一个(dotenv)文件并HTTPStrue在其
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
ssh 在大厂写React,学到了什么?
前言进入大厂搬砖也有3个月了,我工作中的技术栈主要是ReactTypeScript,这篇文章我想总结一下如何在项目中运用React的一些技巧解决一些实际问题,本文中使用的代码都是简化后的,不代表生产环境。生产环境的代码肯定比文中的例子要复杂很多,但是简化后的思想应该是相通的。取消请求如果在React里当前正在
马丁路德 马丁路德
4年前
推荐几个微信小程序开发小技巧
前段时间在下开发了个微信小程序,开发过程中总结了一些我觉得对我有用的小技巧,提炼出来,相当于一个总结复盘,也希望可以帮助到大家。如果对大家确实有帮助,别忘了点赞哦🌟~1\.开发中可能遇到的坑以及Tips本来想写个小技巧的,结果我总结了一堆坑,没上手之前完全想象不到微信小程序的开发体验是如此之差、如此之烂,从微信
Stella981 Stella981
3年前
Intellij IDEA神器那些让人爱不释手的小技巧
概述在2018年5月6日写了一篇介绍IntellIJIDEA的文章,IntellijIDEA神器居然还有这些小技巧(https://my.oschina.net/samgege/blog/1808622),主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的IntellIJIDEA小技巧。由于篇幅原因,只是列出
Stella981 Stella981
3年前
Feign2.0用Apache的Httpclient发送请求并配置连接池
主要是针对SpringCloud新出的版本(CloudFinchley.RC2与Springboot2.0.2.RELEASE),一些新的改动,与在使用中遇见的一些问题,踩过的坑,希望后面的人就不用踩了。服务注入到Eureka需要的MAVEN配置<dependency<groupId
Stella981 Stella981
3年前
Intellij IDEA神器居然还有这些小技巧
概述IntellijIDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对IntellijIDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的IntellijIDEA技巧分享给大家。本文是这个系列的第一篇,主要介绍一些你可能不知道的但是又实用的小技巧。我最爱
Stella981 Stella981
3年前
26种JavaScript优化技术
开发人员的生活总是在学习新事物。作为前端开发人员必须知道一些使我们的代码如何更优雅,工作更轻松的技巧。也许你已经进行了很长时间的JavaScript开发,但有时你可能没有使用不需要解决或编写一些额外代码即可解决问题的最新功能。这些技术可以帮助你编写干净且优化的JavaScript代码。1\.多个条件判断//lo
京东云开发者 京东云开发者
7个月前
前端调试实践
作者:京东零售黄泽平前言在日常调试问题中,相信我们很多人都是用console去排查相关的问题,虽然问题也可以排查出来,但是有时它的效率并不高。这篇文章主要讲解关于断点和一些日常调试技巧的内容,方便你在日后调试问题中,能在不同的前端场景应用不同的调试方式,翻
京东云开发者 京东云开发者
3个月前
前端调试实践
作者:京东零售黄泽平前言在日常调试问题中,相信我们很多人都是用console去排查相关的问题,虽然问题也可以排查出来,但是有时它的效率并不高。这篇文章主要讲解关于断点和一些日常调试技巧的内容,方便你在日后调试问题中,能在不同的前端场景应用不同的调试方式,翻
布局王 布局王
1天前
详解仓颉开发语言中的日志打印问题
一门新的开发语言在诞生初期,由于它本身的特性和使用人数暂时较少,会容易出现一些大家不太容易理解的问题,或者说有一些坑。今天就详细分享一下仓颉开发语言中的日志打印相关内容,带大家踩一踩坑。AppLog在新创建的项目中,Button的点击事件就写好了一行打印日