近期JS心得
child和tags都是[{id:1,value:'a'}]的格式,当点击一级标签,要看二级标签是否已经被选中,如果被选中,则清除出去 如果用for循环 再splice的话 当删除掉了一个元素后,数组的索引发生的变化,造成了程序的异常
所以要用while的方式
const arr = child.childList.map(item => item.id)
let i = this.tags.length
while (i--) {
if (arr.includes(this.tags[i].id)) {
this.tags.splice(i, 1)
}
}
上面的数组对象[{id:1,value:'a'}] 根据id去重
const id = 'id'
this.tags = this.tags.reduce((all, next) => all.some((atom) => atom[id] == next[id]) ? all : [...all, next], [])
数组去重 [1,2,3,4,2,3] 先转成没有重复的set 再转成数组
this.openLabels = Array.from(new Set(this.openLabels))
某个对象的数据渲染了dom,这时要在js里给这个对象添加一个它没有的属性,如果直接用点 elem.haveChecked = 1 这时因为这个属性不是本来就有的 vue没有给他生成getter setter 方法 所以dom的更新会没有或者慢了一秒半秒的,要用全局注册的方式:this.$set(elem, 'haveChecked', 1)
有时一个dom被删除 再被添上时 用this.$refs.stripOuter的方式 取高度 不能正常的取值 用this.$nextTick 也不行 这时 要用document.getElementsByClassName('checkHeader')[0]的方式
const headerHeight = document.getElementsByClassName('checkHeader')[0].clientHeight + 1
const stripHeight0 = document.getElementsByClassName('stripOuter')[0] ? document.getElementsByClassName('stripOuter')[0].clientHeight : 0
const stripHeight1 = document.getElementsByClassName('stripOuter')[1] ? document.getElementsByClassName('stripOuter')[1].clientHeight : 0
this.$refs.searchWrapper.style.maxHeight = headerHeight + stripHeight0 + stripHeight1 + 7 + 'px'
多层级的数组对象 的深拷贝方法。如果用[...arr] 的方式 只能深拷贝一层,再深的层 是浅拷贝,同理 Object.assign(target, source1, source2)也是,深拷贝可以用下面的方式:
this.quotaDataChange = [].concat(JSON.parse(JSON.stringify(this.quotaData)))
取父级页面或者兄弟页面的某个值可以用:
this.$parent this.$children
近期JS心得的更多相关文章
- 比較Backbone.js, Angular.js, Ember.js, Knockout.js 心得
還記得第一次寫網站的時候,我無意間寫成了 SPA(single page application),當時還沒有SPA這個詞,後來因為廣告主需要不同 url location 頁面的廣告展示,只好把部分 ...
- JS 心得总结
1.浏览器关闭事件监听(http://pengjianbo1.iteye.com/blog/507569,http://bbs.csdn.net/topics/360152711) <!DOCT ...
- 分享一下学习css,js心得
简化代码,使页面简洁! web前端开发——将界面更好呈现给用户! 要了解在不同浏览器上的兼容情况.渲染原理和存在的bug! 网站性能优化.SEO: 代码的可维护性.性能: 网站重构的本质:建立一个前端 ...
- 初次使用引用外部js心得
在外部引用自己编辑的js时建立链接写在头部中是会出错的,如下图 错误如下: 这是一个是我初学时遇到的一个算是低级错误吧,看到这个错误,我以为的是我引用的js中编辑的代码是不是哪里写错了,但是看了好多遍 ...
- 普通页面使用vue.js心得
在写本文之前要问自己几个问题,来说明为什么要这么做: 为什么在html中使用vue.js? vue.js已经趋于成熟,个人感觉比jquery要好用的多,但是在node环境下使用vue.js不用使用SS ...
- 今日js心得
<input type="hidden" id="history_chart_json" data-json="#{smartDeviceMon ...
- JS心得——判断一个对象是否为空
判断一个对象是否为空对象,本文给出三种判断方法: 最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带的. ...
- 近期js
1 var value1 = 0, value2 = 0, value3 = 0; for ( var i = 1; i <= 3; i++) { var i2 = i; (function() ...
- es6,es7,es8
概述 ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言.目前JavaScript使用的ECMAScript版本为ECMAScript-262. ECMAScript 标 ...
随机推荐
- 51nod 1101 换零钱
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元. ...
- vue中的修饰符
Vue2.0学习笔记:Vue事件修饰符的使用 事件处理 如果需要在内联语句处理器中访问原生DOM事件.可以使用特殊变量$event,把它传入到methods中的方法中. 在Vue中,事件修饰符处理 ...
- 一步一步教你用IntelliJ IDEA 搭建SSM框架(1)
1.基本概念 SSM框架指:Spring MVC + Spring + MyBatis Spring MVC是一种web层mvc框架,用于替代servlet,处理|响应请求,获取表单参数,表单校验等 ...
- 酷炫的3D照片墙
今天给大家分享的案例是酷炫的3D照片墙 这个案例主要是通过 CSS3 和原生的 JS 来实现的,接下来我给大家分享一下这个效果实现的过程.博客上不知道怎么放本地视频,所以只能放两张效果截图了. 1.实 ...
- 【转】Windows 邮件槽(MailSlot)
Windows 邮件槽(MailSlot) 来自<Windows网络编程第二版 中文版> 优点:通过网络,将一条消息广播给一台或多台计算机. 缺点:只允许从客户机到服务器,建立一种不可 ...
- Android驱动开发读书笔记五
第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...
- centos7安装pgsql及操作命令
1.下载所需要的数据库版本https://yum.postgresql.org/repopackages.php 2.安装数据库版本包 yum install -y https://download. ...
- Python基础——字典(dict)
由键-值对构建的集合. 创建 dic1={} type(dic1) dic2=dict() type(dic2) 初始化 dic2={'hello':123,'world':456,'python': ...
- GoF23种设计模式之行为型模式之模板方法
概述 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 适用性 1.一次性实现一个算法的不变的部分, ...
- Ubuntu系统里的python
Ubuntu系统里,默认安装python2.7.x版本的python,直接执行python命令,打开的将是python 2.7.x版本:python3版本的需要自行安装,安装成功后,执行python3 ...