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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
HTML颜色选择器实现代码
Nov 23 Javascript
JS注释所产生的bug 即使注释也会执行
Nov 19 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
jquery取消事件冒泡的三种方法(推荐)
May 28 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 Javascript
angular select 默认值设置方法
Jun 23 Javascript
vue 点击按钮实现动态挂载子组件的方法
Sep 07 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 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
zend framework配置操作数据库实例分析
2012/12/06 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
浅析js封装和作用域
2013/07/09 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
Python生成随机密码
2015/03/10 Python
详解Python中heapq模块的用法
2016/06/28 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python+opencv识别图片中的圆形
2020/03/25 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
2015年仓库管理工作总结
2015/05/25 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
JS ES6异步解决方案
2021/04/29 Javascript
react国际化react-intl的使用
2021/05/06 Javascript