题解 | #设置标签#
设置标签
http://www.nowcoder.com/practice/b164e87713804e1ab46cf7a84936b6ba
内容无法提交,一直提示“系统内部错误”,但是在线下测试没问题,大家可以参考下,如果有错误烦请指正,大家共同交流
var tagInput = { isInited: false, init: init, bindEvent: bindEvent, addTag: addTag, removeTag: removeTag }; tagInput.init(); function init() { var that = this; if (that.isInited) return; that.isInited = true; // 请修改这一行代码,保存class为js-input的输入框的dom元素引用 that.input = document.querySelector(".js-input"); that.bindEvent(); } function bindEvent() { var that = this; var input = that.input; if (!input) return; input.addEventListener('keydown', function (event) { console.log(event); // 请修改这一行代码,判断用户是否按了回车键 var isEnter = false; if(event.keyCode == 13){ isEnter = true; } // 请修改这一行代码,判断用户是否按了删除键 var isDelete = false; // 【需求】2、当用户敲删除键时,如果输入框当前没有内容,则删除前一个标签 // 如果按下了删除按钮,并且input框中的内容为空才执行删除tag操作。如果input内容为空则执行默认操作 if(event.keyCode == 8 && !that.input.value){ isDelete = true; } (isEnter || isDelete) && event.preventDefault(); isEnter && that.addTag(); isDelete && that.removeTag(); }); input.parentNode.addEventListener('click', function () { input.focus(); }); } // 【需求】1、当用户输入内容并敲回车键时,将输入框的内容在输入框前显示成标签,并清空输入框内容 function addTag() { var _this = this; // 【需求】4、标签不能为空字符串 if(_this.input.value == "") return; // 创建需要添加的新标签 var newSpan = document.createElement("span"); newSpan.className = "tag"; // 【需求】3、标签需要去掉字符串两端的多余的空格 newSpan.innerHTML = _this.input.value.trim(); // 获取到已添加的tag标签,用于判断是否重复添加 var tagsList = _this.input.parentElement.innerText.split("\n"); // 【需求】5、标签不能重复,如果输入已存在的内容相同的标签,则不添加,并清空输入框 if(!tagsList.includes(_this.input.value)){ // 向input框之前插入一个tag _this.input.parentElement.insertBefore(newSpan, _this.input); } // 添加完成后清空数据 _this.input.value = ""; } function removeTag() { var _this = this; // 删除最后一个标签 _this.input.parentElement.removeChild(_this.input.previousElementSibling); }