请给我一个完整的html文件,实现textarea与标签组合,点击标签填入标签内容,并以#号包括,删除textarea中一个字符时整个标签都从textarea中删除哦
时间: 2024-02-03 21:15:48 浏览: 117
HTML属性标签大全注释
5星 · 资源好评率100%
好的,请参考如下代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Textarea and Tag Combination</title>
<style>
.tag {
display: inline-block;
padding: 5px;
background-color: #f0f0f0;
border-radius: 5px;
margin-right: 5px;
}
</style>
</head>
<body>
<textarea id="text"></textarea>
<br><br>
<button onclick="addTag('tag1')">Tag1</button>
<button onclick="addTag('tag2')">Tag2</button>
<button onclick="addTag('tag3')">Tag3</button>
<button onclick="addTag('tag4')">Tag4</button>
<br><br>
<div id="tags"></div>
<script>
function addTag(tag) {
var text = document.getElementById("text");
var tags = document.getElementById("tags");
var tagContent = text.value.substring(text.selectionStart, text.selectionEnd);
if (tagContent) {
text.value = text.value.substring(0, text.selectionStart) + "#" + tag + "(" + tagContent + ")" + text.value.substring(text.selectionEnd, text.value.length);
var newTag = document.createElement("span");
newTag.className = "tag";
newTag.innerHTML = "#" + tag + "(" + tagContent + ")";
tags.appendChild(newTag);
} else {
alert("Please select some text first!");
}
}
document.getElementById("text").addEventListener("input", function() {
var text = this.value;
var tags = document.getElementById("tags");
tags.innerHTML = "";
var tagRegex = /#([^\(\)]+)\(([^\(\)]+)\)/g;
var match;
var lastIndex = 0;
while ((match = tagRegex.exec(text)) !== null) {
var index = match.index;
if (index > lastIndex) {
var textNode = document.createTextNode(text.substring(lastIndex, index));
tags.appendChild(textNode);
}
var newTag = document.createElement("span");
newTag.className = "tag";
newTag.innerHTML = match[0];
tags.appendChild(newTag);
lastIndex = index + match[0].length;
}
if (lastIndex < text.length) {
var textNode = document.createTextNode(text.substring(lastIndex, text.length));
tags.appendChild(textNode);
}
});
document.getElementById("text").addEventListener("keydown", function(e) {
if (e.keyCode === 8) {
var tags = document.getElementById("tags");
var lastChild = tags.lastChild;
if (lastChild && lastChild.nodeType === Node.ELEMENT_NODE && lastChild.classList.contains("tag")) {
var tagText = lastChild.innerHTML;
var tagContent = tagText.substring(tagText.indexOf("(") + 1, tagText.lastIndexOf(")"));
var text = document.getElementById("text");
var startIndex = text.value.lastIndexOf(tagContent, text.selectionStart - 1);
var endIndex = startIndex + tagContent.length;
if (startIndex !== -1 && endIndex === text.selectionStart) {
text.value = text.value.substring(0, startIndex) + text.value.substring(endIndex, text.value.length);
tags.removeChild(lastChild);
}
}
}
});
</script>
</body>
</html>
```
这个HTML文件实现了一个带标签的文本输入框,实现了以下功能:
- 点击标签按钮可以在文本框中插入以#号包括的标签,标签内容为当前选中的文本。
- 输入框中输入的文本会被自动解析为标签,并在下方显示出来。
- 在输入框中删除一个字符时,如果最后一个显示的元素是标签,则同时删除该标签。
阅读全文