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 相关文章推荐
javascript陷阱 一不小心你就中招了(字符运算)
Nov 10 Javascript
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
JS中Safari浏览器中的Date
Jul 17 Javascript
基于 Bootstrap Datetimepicker 联动
Aug 03 Javascript
js实现同一个页面,多个enter事件绑定的示例
Oct 10 Javascript
jQuery无冲突模式详解
Jan 17 jQuery
Node.js实现简单管理系统
Sep 23 Javascript
js实现上传图片并显示图片名称
Dec 18 Javascript
js实现中文实时时钟
Jan 15 Javascript
js实现抽奖的两种方法
Mar 19 Javascript
微信小程序国际化探索实现(附源码地址)
May 20 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 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
PHP实现读取一个1G的文件大小
2013/08/24 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
python中元类用法实例
2014/10/10 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Django入门使用示例
2017/12/12 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
便利店促销方案
2014/02/20 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
在职证明范本
2015/06/15 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
Nginx反向代理配置的全过程记录
2021/06/22 Servers
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android