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) { // 请修改这一行代码,判断用户是否按了回车键 var isEnter = false; if (event.keyCode === 13) isEnter = true; // 请修改这一行代码,判断用户是否按了删除键 var isDelete = false; // 当点击为删除键,并且输入框为空内容时,isDelete才为true阻止默认删除事件 if (event.keyCode === 8 && input.value === "") isDelete = true; (isEnter || isDelete) && event.preventDefault(); isEnter && that.addTag(); isDelete && that.removeTag(); }); input.parentNode.addEventListener("click", function () { input.focus(); }); } function addTag() { var that = this; // 输入的标签值,去空白 var tagTemp = that.input.value.trim(); // 判断是否存在已存在的标签 var isHave = Array.from(document.querySelectorAll(".tag")).some( (item) => item.innerText === tagTemp ); if (tagTemp && !isHave) { // 有tag元素,则在最后一个tag元素之后插入元素 if (document.querySelectorAll(".tag").length) { document .querySelectorAll(".tag") [document.querySelectorAll(".tag").length - 1].insertAdjacentHTML( "afterend", `<span class="tag">${tagTemp}</span>` ); } else { // 没有tag则直接在input框前插入 that.input.insertAdjacentHTML( "beforebegin", `<span class="tag">${tagTemp}</span>` ); } } // 清空 that.input.value = ""; } function removeTag() { var that = this; var tagTemp = that.input.value; // 输入框没有任何值并且里面存在tag元素执行删除 if (!tagTemp && document.querySelectorAll(".tag").length) { document .querySelector(".tag-input") .removeChild( document.querySelectorAll(".tag")[ document.querySelectorAll(".tag").length - 1 ] ); } }