JS实现新建文件夹功能


Posted in Javascript onJune 17, 2017

每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用

JS实现新建文件夹功能

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body {
margin: 0;
} 
header {
border-bottom: 2px solid #000;
height: 40px;
line-height: 40px;
text-align: center;
}
.file {
margin: 20px;
float: left;
position: relative;
width: 100px;
height: 110px;
border-radius: 5px;
border: 1px solid rgba(0, 0, 0, 0);
background: url(img/file.png) no-repeat center 25px;
cursor: pointer;
}
.file input {
position: absolute;
left: 3px;
top: 3px;
display: none;
}
.fileName {
position: absolute;
left: 5px;
bottom: 10px;
width: 90px;
font: 12px/20px Arial,"宋体";
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.fileShow {
border: 1px solid #000;
background-color: #f1f1f1;
}
.fileShow input {
display: block;
}
.info {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 50px;
font: 30px/50px "宋体";
text-align: center;
transform: translateY(-50px);
background: #ccc;
}
</style>
<!--
contenteditable 使内容可以编辑
-->
<script type="text/javascript">
window.onload = function(){
var creat = document.querySelector('.creat');
var del = document.querySelector('.del');
var wrap = document.querySelector('.wrap');
var info = document.querySelector('.info');
var timer = 0;
creat.onclick = function(){
/* 创建元素,并添加事件 */
var file = document.createElement('div');
var fileName = getFileName();
file.className = "file";
file.innerHTML = '<input type="checkbox" name=""><span class="fileName" contenteditable>'+fileName+'</span>';
var check = file.querySelector('input[type = "checkbox"]');
var fileName = file.querySelector('.fileName');
file.onmouseover = function(){
this.className = "file fileShow";
};
file.onmouseout= function(){
if(!check.checked){
this.className = "file";
}
};
fileName.onblur = function(){
if(this.innerHTML.trim() == ""){
info.innerHTML = "请输入文件夹名字";
info.style.transform = "translateY(0)";
this.focus();
clearTimeout(timer);
timer=setTimeout(function(){
info.style.transform = "translateY(-50px)";
},2000);
return;
}
var fileNames = document.querySelectorAll('.fileName');
for(var i = 0; i < fileNames.length; i++){
if(this != fileNames[i]&&this.innerHTML == fileNames[i].innerHTML){
info.innerHTML = "文件夹名字重名了,请重新输入";
info.style.transform = "translateY(0)";
this.focus();
clearTimeout(timer);
timer=setTimeout(function(){
info.style.transform = "translateY(-50px)";
},2000);
}
}
};
/*onkeydown 键盘按下 */
fileName.onkeydown = function(){
if(this.innerHTML == "请输入名字"){
this.innerHTML = "";
}
}
wrap.appendChild(file);
};
del.onclick = function(){
/* 删除选中的元素 */
var fileName = wrap.querySelectorAll('input:checked+.fileName');
var input = wrap.getElementsByTagName("input")
/* query方法只获取一次,dom修改了如果不重新获取,它是不会和dom同步的而get方法会时时和dom同步,dom改了get获取到的数据也会自定修改 */
//console.log(fileName,input);
for(var i = 0; i < fileName.length; i++){
wrap.removeChild(fileName[i].parentNode);
}
console.log(fileName);
};
// 获取文件夹名字
/* 
创建文件夹名字并进行排序
0 新建文件夹
1 新建文件夹2
2 新建文件夹3

第一种情况:正常排序
*/
function getFileName(){
var fileName = "新建文件夹";
var fileNameLast = "";
var fileNames = wrap.querySelectorAll('.fileName');
if(fileNames.length == 0){ //当前一个都还没有也就是创建第0个
return fileName;
}
// 当中间可能删除了几个
/*
由于中间会删除再添加,所以顺序会被打乱
把所有的名字存入数组,然后进行排序
*/
var names = [];
for(var i = 0; i < fileNames.length; i++){
names.push(fileNames[i].innerHTML);
}

names = names.filter(function(val){
var startName = val.substr(0,5);
if(startName != "新建文件夹"){
return false;/*筛选掉不是已新建文件夹命名的*/
}
var lastName = val.substr(5);
if(isNaN(lastName)){ /*筛选掉不是已新建文件夹跟随的不是数字的*/
return false;
}
return true;
});
names.sort(function(a,b){
return a.substr(5) - b.substr(5); 
});
console.log(names);
for(var i = 0; i < names.length; i++){
if(names[0] != fileName){
return fileName;
}
if(i>0 && names[i] != fileName+(i+1)){
return fileName+(i+1);
}
}
//当前顺序向后排列 name 就等于在当前的个数上+1
fileNameLast = names.length + 1;
fileName += fileNameLast;
return fileName;
}
}; 
</script>
</head>
<body>
<div class="info"></div>
<header>
<input type="button" value="新建文件夹" class="creat" />
<input type="button" value="删除文件夹" class="del" />
</header>
<div class="wrap">
<!-- <div class="file fileShow">
<input type="checkbox" name="">
<span class="fileName">新建文件夹新建文件夹</span>
</div> -->
</div> 
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js拦截alert对话框另类应用
Jan 16 Javascript
JavaScript回调(callback)函数概念自我理解及示例
Jul 04 Javascript
addEventListener 的用法示例介绍
May 07 Javascript
JavaScript驾驭网页-DOM
Mar 24 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
Dec 13 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
Nov 09 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
Oct 09 Javascript
JS删除对象中某一属性案例详解
Sep 08 Javascript
vue-router路由参数刷新消失的问题解决方法
Jun 17 #Javascript
JS实现商品筛选功能
Aug 19 #Javascript
node文件上传功能简易实现代码
Jun 16 #Javascript
详解webpack 多入口配置
Jun 16 #Javascript
requirejs + vue 项目搭建详解
Jun 16 #Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 #jQuery
jQuery序列化后的表单值转换成Json
Jun 16 #jQuery
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
杏林同学录(一)
2006/10/09 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
Python对wav文件的重采样实例
2020/02/25 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
如何对python的字典进行排序
2020/06/19 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
输入N,打印N*N矩阵
2012/02/20 面试题
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
如何执行一个shell程序
2012/11/23 面试题
杭州西湖英语导游词
2015/02/03 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
一条 SQL 语句执行过程
2022/03/17 MySQL