原生js实现新闻列表展开/收起全文功能

发布时间 - 2026-01-10 22:40:16    点击率:

知识要点

1.实现原理很简单,通过点击a标签设置div的display属性隐藏或者显示,

主要是对dom操作的掌握。

2.需要用到的dom操作:

parentNode 获取父级元素

nextSibling获取下一个紧跟的节点

previousSibling获取上一个紧跟的节点

3.注意事项:

要考虑到当点击展开全文的时候,其他已经展开的全文要收起来。

当用nextSibling获取下一个节点时候,不同浏览器的判断是不一样的

有的是获取元素,有的获取换行符或者空格,所以这里就要用到nodeType来判断一下数据类型nodeType只返回数字1、2、3

只有返回1的时候获取的才是元素节点

(我特么做的时候没考虑到这个问题,还以为哪出毛病了搞了好久)

还有就是由于js里没有像jquery里获取同级所有元素的dom操作,所以我自己写了个siblings(elm)

以后也可以用,一劳永逸

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>demo</title>
<style>
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{margin:0;padding:0;}
h1,h2,h3,h4,h5,h6{font-size:100%;}
address,cite,dfn,em,var{font-style:normal;}
code,kbd,pre,samp{font-family:courier new,courier,monospace;}
ul,ol{list-style:none;}
a{text-decoration:none;}
a:hover{text-decoration:none;}
sup{vertical-align:text-top;}
sub{vertical-align:text-bottom;}
legend{color:#000;}
fieldset,img{border:0;}
button,input,select,textarea{font-size:100%;}
table{border-collapse:collapse;border-spacing:0;}
.clear{clear: both;float: none;height: 0;overflow: hidden;}
body{color:#333; font: 12px/1.3 'Arial','Microsoft YaHei';}
#pn{width: 650px; height: auto; background: #fff; margin: 0 auto; padding: 5px;}
#list0{margin-bottom: 10px;}
.title{ font-weight: bold; font-size: 14px; margin-bottom: 7px;}
.time{color: #808080; margin-bottom: 2px;}
.content{display: none; padding: 1px 0 3px; line-height: 23px; font-size: 14px; }

.btm{text-align: right; height: 30px; }
.hidd{ color: #eb7350; margin-left: 5px; }
.show{ color: #eb7350; margin-left: 5px; }
.zy{padding: 1px 0 3px; line-height: 23px; font-size: 14px;}
</style> 
</head> 
<body>
 <div id="pn">
 <div id="list0">
 <p class="title">Jackie吉吉</p>
 <p class="time">12月3日 20:49 来自 +niPhone 6s</p>
 <p class="zy">感谢@马路口的YY 今天的款待!一直觉得你们两口子颜值又高人又有趣,又都是高材生,认识你们真的很是很幸运的一件事!~ 终于修成正果了呀~祝福你们新婚快乐白头偕老~ 感谢...<a class="show" href="#">展开全文</a></p>
 <div class="content">感谢@马路口的YY 今天的款待!一直觉得你们两口子颜值又高人又有趣,又都是高材生,认识你们真的很是很幸运的一件事!~ 终于修成正果了呀~祝福你们新婚快乐白头偕老~ 感谢@SNH48-杨韫玉-- 让我们相识[偷乐]以后也一起去看公演呀~ 哪个队都成。
 <a href="#" class="hidd">收起全文</a>
 </div>
 </div>

 <div id="list0">
 <p class="title">高晓松</p>
 <p class="time">44分钟前 来自 微博 weibo.com</p>
 <p class="zy">波澜壮阔的独立斗争,风起云涌的解放运动,卡斯特罗泼墨挥毫一人写就半部古巴史。戴名表开豪车上名校,亲美富二代卡斯特罗早早走上革命之路竟是由基因决定?艳福不浅,老卡又如何能在有生之年睡完传闻中的35000个女人?高晓松用数据还原真实的古巴,看今日...<a class="show" href="#">展开全文</a></p>
 <div class="content">波澜壮阔的独立斗争,风起云涌的解放运动,卡斯特罗泼墨挥毫一人写就半部古巴史。戴名表开豪车上名校,亲美富二代卡斯特罗早早走上革命之路竟是由基因决定?艳福不浅,老卡又如何能在有生之年睡完传闻中的35000个女人?高晓松用数据还原真实的古巴,看今日的它究竟是落后贫穷还是盛世繁华:L晓松奇谈之革命领袖卡斯特罗的传奇一生
 <a href="#" class="hidd">收起全文</a>
 </div>
 </div>
 <div id="list0">
 <p class="title">王尼玛</p>
 <p class="time">12月7日 12:30 来自 微博weibo.com</p>
 <p class="zy">已退役的美国休斯顿德州人橄榄球队的外接手安德烈·约翰逊,为12位由儿童保护服务组织选出的孩子买圣诞节玩具,孩子们可以在80秒内...<a class="show" href="#">展开全文</a></p>
 <div class="content">已退役的美国休斯顿德州人橄榄球队的外接手安德烈·约翰逊,为12位由儿童保护服务组织选出的孩子买圣诞节玩具,孩子们可以在80秒内选择他们喜欢的任何玩具,最终这些玩具花费19144.58美元,慷慨!好了好了别闹了,论飙车还是应该老司机出马!
 <a href="#" class="hidd">收起全文</a>
 </div>
 </div>
 </div>
 <script type="text/javascript"> 
 //在页面加载完后立即执行多个函数方案。
 function addloadEvent(func){
 var oldonload=window.onload;
 if(typeof window.onload !="function"){
  window.onload=func;
 }
 else{
  window.onload=function(){
  if(oldonload){
   oldonload(); 
  }
  func();
  }
 }
 }
 addloadEvent(b);
 //在页面加载完后立即执行多个函数方案结束。
 //获取同级所有元素开始
 function siblings(elm) {
 var a = [];
 var p = elm.parentNode.children;
 for(var i =0,pl= p.length;i<pl;i++){
 if(p[i] !== elm) a.push(p[i]);
 }
 return a;
 }
 //获取同级所有元素结束
 function b(){
 //获取查看全文的a标签
 var show=document.getElementsByClassName("show");
 //遍历a
 for(var i=0;i<show.length;i++){
 show[i].onclick=function(){
 //找到a的父级
 var father=this.parentNode;
 //设置隐藏
 father.style.display="none";
 //找到父级的下一个节点
 var next=father.nextSibling;
 //判断下一个节点的数据类型,如果不是1(元素节点),那就接着往下找
 if(next.nodeType!=1){
 next=next.nextSibling;
 }
 //正文显示
 next.style.display="block";
 //获取整个list0
 var ff=this.parentNode.parentNode;
 //获取除去list0的所有同级元素
 var bro=siblings(ff);
 for(var y=0;y<bro.length;y++){
 //获取每个list0里的第一个content类名
 var w=bro[y].getElementsByClassName("content")[0];
 //获取content类名的前一个节点
 var wt=w.previousSibling;
 //判断前一个节点的数据类型,如果不是1(元素节点),那就接着往上找
 if(wt.nodeType!=1){
 wt=wt.previousSibling;
 }
 //同级摘要部分显示
 wt.style.display="block";
 //同级全文部分隐藏
 w.style.display="none";
 }  
 }
 }
 //下面就是点击收回全文的部分与展开原理一样
 var hidd=document.getElementsByClassName("hidd");
 for(var i=0;i<hidd.length;i++){
 hidd[i].onclick=function(){
 var fafa=this.parentNode;
 fafa.style.display="none";
 var pre=fafa.previousSibling;
 if(pre.nodeType!=1){
 pre=pre.previousSibling;
 }
 pre.style.display="block";
 }
 }
 } 
 </script>
</body> 
</html> 

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 展开  # 收起  # 一个封装js代码-----展开收起效果示例  # vue实现点击展开点击收起效果  # jQuery实现的页面详情展开收起功能示例  # JavaScript实现文字展开和收起效果  # Vue+ElementUI前端添加展开收起搜索框按钮完整示例  # 前端实现文本超出指定行数显示"展开"和"收起"效果详细步骤  # 卡斯特罗  # 古巴  # 安德烈  # 约翰逊  # 好了  # 那就  # 多个  # 一人  # 是由  # 能在  # 波澜壮阔  # 真的很  # 之路  # 孩子们  # 尼玛  # 考虑到  # 一件事  # 如果不是  # 美国  # 有生之年 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php json中文编码为null的解决办法  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何在IIS中新建站点并解决端口绑定冲突?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  免费网站制作appp,免费制作app哪个平台好?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  长沙企业网站制作哪家好,长沙水业集团官方网站?  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  利用vue写todolist单页应用  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Python文件操作最佳实践_稳定性说明【指导】  如何在 Pandas 中基于一列条件计算另一列的分组均值  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何在IIS中新建站点并配置端口与物理路径?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何快速选择适合个人网站的云服务器配置?  香港服务器如何优化才能显著提升网站加载速度?  Laravel Fortify是什么,和Jetstream有什么关系  微信小程序 五星评分(包括半颗星评分)实例代码  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何在Windows 2008云服务器安全搭建网站?  iOS发送验证码倒计时应用  详解CentOS6.5 安装 MySQL5.1.71的方法  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何在万网主机上快速搭建网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何快速登录WAP自助建站平台?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何生成腾讯云建站专用兑换码?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  JavaScript如何实现错误处理_try...catch如何捕获异常?  大连 网站制作,大连天途有线官网?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  新三国志曹操传主线渭水交兵攻略  中国移动官方网站首页入口 中国移动官网网页登录  Python文件异常处理策略_健壮性说明【指导】  Laravel怎么在Blade中安全地输出原始HTML内容  在Oracle关闭情况下如何修改spfile的参数