原生JavaScript实现简易留言板功能
作者:竹影时间:2026-10-24 04:07:53浏览:262
本文详细介绍如何使用原生JavaScript、HTML和CSS构建一个简易留言板。内容涵盖设计思路、界面布局及核心功能实现,包括通过DOM操作动态添加留言、显示楼层信息、获取当前时间以及基本的删除与点赞功能,适合前端初学者参考学习。
引言
本文分享了一段使用JavaScript实现留言板功能的完整代码示例,供读者参考学习。
设计思路
一、设计思路
该留言板界面主要划分为两个核心区域:一是留言展示区,用于显示已发布的留言内容;二是留言发布区,供用户输入并提交新的留言信息。下图展示了最终实现的留言板界面效果:

在技术实现上,主要使用了input、textarea、button、img和div等HTML元素。同时,利用Date对象获取当前时间,并通过innerHTML属性动态修改span标签内的内容。整体功能基于DOM操作知识实现。
代码实现
二、代码实现
HTML结构部分
HTML结构
<body οnlοad="f3()">
<div class="title">
<h1>留言板</h1>
<span id="step">一共有()楼</span>
</div>
<div id="contents">
<div class="box" id="box">
<div class="div01">1楼</div>
<div class="tit"><img src="img/i1.png"></div>
<div class="main">
<div>姓名:</div>
<div>内容:</div>
</div>
<div class="div02">
<div><a href="javascript:void (0)" οnclick="del(this)">删除</a>|<a href="javascript:void (0)" οnclick="praise(this,0)">点赞()</a> </div>
<div>发布时间:</div>
</div>
</div>
</div>
<div class="title1">
<h1>发布留言</h1>
<span></span>
</div>
<div class="message">
<div class="nav">
选择头像:
<div id="img">
<img src="img/i1.png">
<img src="img/i2.jpg">
<img src="img/i3.jpg">
</div>
<div id="pic1"></div>
<div>用户姓名:<input type="text" id="name" οnblur="f1(this)" οnfοcus="f(this,'请输入用户名!')"><span></span></div>
<div>留言内容:<textarea id="textarea" οnblur="f1(this)" οnfοcus="f(this,'请输入内容!')"></textarea><span></span></div>
<button οnclick="f2()">发布留言</button>
</div>
</div>
</body>
CSS样式部分
CSS样式
*{padding: 0;margin: 0;border: 0;text-decoration: none;}
.title{width: 1000px;height: 80px;background: #2b669a;margin: auto; color: #ffffff;}
.title h1{line-height: 80px;text-align: center;width: 920px;float: left;}
.title span{float: left;width: 80px;line-height: 80px;font-size: 12px;}
#contents{ width: 1000px;background:#9acfea;margin: auto;}
#contents .box{display:none;height: 150px;border-bottom: 1px dashed #ffffff;}
#contents .box .div01{width: 50px;text-align: center;float: left;line-height: 150px;}
#contents .box .tit{width: 80px;height: 80px;float: left;margin: 30px;}
#contents .box .tit img{width: 80px;height: 80px;}
#contents .box .main{width: 100px;height: 100px;float: left;margin-top: 30px;line-height: 40px;}
#contents .box .div02{font-size: 12px;width: 240px;height: 100px;float: right;line-height: 40px;margin-top: 30px;}
.title1{width: 1000px;height: 80px;background: #2b669a;margin: auto;color: #ffffff;}
.title1 span{float: left;width: 80px;line-height: 80px;font-size: 12px;}
.title1 h1{line-height: 80px;text-align: center;width: 920px;float: left;}
.message{width: 1000px;margin: auto;line-height:30px;background:#9acfea;height: 220px;}
.message .nav{width: 400px;margin-left: 400px;}
#img img{width:50px;height: 50px;}
.border{border: 1px solid crimson;}
.red{color:red;}
.border{border: 1px solid red;}
JavaScript逻辑部分
JavaScript逻辑
function f(obj,text) {
obj.nextSibling.innerHTML=text;
obj.nextSibling.style.color="#000";
obj.nextSibling.style.fontSize=12+'px';
}
function f1(obj) {
obj.nextSibling.innerHTML=" ";
}
//发布留言
var i = 0;
//i 为 box 的 id
var j = 0;
//j是一共有多少个楼,删除后的用它接收
var q =1;
function f2() {
var name = document.getElementById("name");
var main = document.getElementById("textarea");
var box = document.getElementById("box");
var contents = document.getElementById("contents");
var step = document.getElementById("step");
var pic1 =document.getElementById("pic1");
if (name.value == "") {
name.nextSibling.innerHTML="*必须填写用户名!";
name.nextSibling.style.color="red";
name.nextSibling.style.fontSize=10+'px';
}else if(main.value == ""){
main.nextSibling.innerHTML="必须填写内容";
main.nextSibling.style.color="red";
main.nextSibling.style.fontSize=10+'px';
}else if(q==1){
//选择头像
pic1.innerHTML="必须选中一个头像!";
pic1.style.color="red";
pic1.style.fontSize=10+"px";
}else {
//楼层
var div = box.cloneNode(true);
div.style.display="block";
i++;
j++;
div.id="box"+i;
var child = div.getElementsByTagName("div");
//获取克隆出来div里面的小div
child[0].innerHTML=i+"楼";
child[3].innerHTML="姓名:"+name.value;
child[4].innerHTML="内容:"+main.value;
step.innerHTML="一共有("+ j +")楼";
child[7].innerHTML="发布时间"+oTime();
contents.appendChild(div);
}
}
//发布时间的时间
function oTime() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var date1 = date.getDate();
var day = date.getDay();
var hour = date.getHours();
var minutes = date.getMinutes();
var second = date.getSeconds();
if(day === 0){
day = "日";
}else if(day == 1){
day = "一";
}else if(day == 2){
day = "二";
}else if(day == 3){
day = "三";
}else if(day == 4){
day = "四";
}else if(day == 5){
day = "五";
}else if(day == 6){
day = "六";
}
return year+"年"+month+"月"+date1+"日"+hour+":"+minutes+":"+second+"星期"+day;
}
//删除
function del(obj) {
var step = document.getElementById("step");
j--;
step.innerHTML="一共有("+ j +")楼";
//删除后一共有多少楼
var contents = document.getElementById("contents");
var p =obj.parentNode.parentNode.parentNode;
//removeChild(p)表示把p删掉
contents.removeChild(p);
}
//点赞
function praise(obj,t) {
t++;
var parent1 = obj.parentNode;
parent1.innerHTML='<a href="javascript:void (0)" οnclick="del(this)">删除</a>|' +
'<a href="javascript:void (0)" οnclick="praise(this,'+ t +')">点赞('+ t +')</a>';
}
//选择头像
function f3() {
var img = document.getElementById("img");
var pic = img.getElementsByTagName("img");
var box = document.getElementById("box");
var img1= box.getElementsByTagName("img");
for(var a =0; a<pic.length;a++){
pic[a].onclick=function () {
for(var b=0;b<pic.length;b++){
pic[b].className="";
}
this.className="border";
img1[0].src = this.src;
q=2;
pic1.innerHTML="";
}
}
}
以上是本文的全部内容,希望能为读者的学习提供有益帮助,也欢迎大家继续支持本站。
作者最新文章
网页开发三者分工:HTML结构、CSS样式与JavaScript交互怎么协作
2026-11-05 12:51:22
JS解析URL参数时怎么处理中文乱码和特殊字符
2026-11-05 12:47:23
js-cookie 存储 JSON 对象:自动序列化与反序列化技巧
2026-11-05 12:36:26
marked.js 快速上手:安装与基础 Markdown 转 HTML 示例
2026-11-05 09:32:53
Phaser.js 与 PixiJS、Cocos Creator 的技术选型对比
2026-11-05 08:36:30
