为了账号安全,请及时绑定邮箱和手机立即绑定

为什么出错呢??全文展开但是收起的时候摘要都收起来了??

为什么出错呢??全文展开但是收起的时候摘要都收起来了??

qq_苏达晟_0 2016-09-13 13:49:04
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>点击按钮控制展开全文与收起全文</title> <style type="text/css"> #art0{ width: 950px; height: auto; border: 1px solid #e7cfcf; padding:10px; margin:0 auto; } .artT{ font-weight: bold; } .butT{ color:#d5d5d5; } .buttom{ text-align: right; line-height: 30px; } .btn{ border: 1px solid #636363; padding:5px; text-decoration: none; background-color: #f0f0f0; } </style> <script src="js/jquery.js"></script> <script> /*function showdiv(obj) { var x = obj.parentNode;//摘要; var y = x.nextSibling;//正文; x.style.display = "none"; y.style.display = "block" }; function hidediv(obj) { var y = obj.parentNode.parentNode; var x = y.previousSibling; x.style.display = "block"; y.style.display = "none"; }*/ function showdiv(obj){        var x=obj.parentNode;//摘要        var y=nextnode(x.nextSibling);//正文        x.style.display="none";        y.style.display="block"    }    function hidediv(obj){        var y = obj.parentNode.parentNode;//这才是正文        var x = nextnode(y.previousSibling);//摘要        x.style.display="block";        y.style.display="none";    }    function nextnode(node){            if(node.nodeType == 1){ //判断是否是元素节点,排除空的文本节点                         return node;            }          if(node.nextSibling){                     return nextnode(node.nextSibling);          } } </script></head><body id="meta_pname"> <div id="pn"> <div id="art0"> <p class="artT">青春对白,邮寄我的时光</p> <p class="butT">日期:2016-08-21 09:31:53 点击:7068</p> <p>1、手心捧着的文字,清清浅浅,刻着你的眉,你的眼,素笔深深,想你的日子,光阴开成了一朵思念的花,那妖,那艳。 2、终难忘,年少时光,偶尔脸红心跳的告白,没有离别,没有伤痛,温暖如花,开满整个夏天。 3、多年以后,终于明白,世界上总有两个人是天生一对,有情 <a href="#" onclick="showdiv(this);">...全文</a></p> <div class="content" style="display:none;"> 1、手心捧着的文字,清清浅浅,刻着你的眉,你的眼,素笔深深,想你的日子,光阴开成了一朵思念的花,那妖,那艳。   2、终难忘,年少时光,偶尔脸红心跳的告白,没有离别,没有伤痛,温暖如花,开满整个夏天。   3、多年以后,终于明白,世界上总有两个人是天生一对,有情的会相爱,久别的会重逢,这是你告诉我的答案。   4、月色满空,微凉如斯。你说我不来,你不走,可花期已过,情心已散,我找遍了城市的每个角落,依然不见你的身影,哭泣的蹲在路边,像个孩子。   5、说好的幸福,还未到的明天,就挥手再见,是不是每个人的青春,都有无法掩饰的伤,与爱有关,与你有关。   6、学会珍惜和善待对你好的人,因为,不是所有的人,都会对你掏心掏肺。   7、盛夏,月光倾城。半朵烟花下,我们背靠背沉默着,一直到天明,没有说话,怕一开口就要转身天涯。 <p class="buttom"> <a href="#" class="btn" onclick="hidediv(this);">收起全文</a> </p> </div> </div> </div> </body></html>
查看完整描述

2 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

  function hidediv(obj){
        var y = obj.parentNode.parentNode;//这才是正文
        var x = nextnode(y.previousSibling);//摘要       
        //这里有问题,var x=nextnode方法调用后会return正文部分(即x)
        x.style.display="block";   
        y.style.display="none";
    }

按照你代码的意思,nextnode是检测元素是否空白节点,是则略过,不是则检测它的下一个元素;

但是当你收缩的时候,不能再让它检测下一个元素,而是应该去检测上一个元素;

因此,需要添加一个函数   我这里就命名prevnode

function prevnode(node){
    if(node.nodeType == 1){ //判断是否是元素节点,排除空的文本节点
        return node;
    }
    if(node.previousSibling){                   //检测上一个节点时候存在
        return prevnode(node.previousSibling);    //存在时,继续检测上一个节点是否空白节点
    }
}

收缩按钮,调用prevnode方法,整片JS代码如下:

    <script>
        /*function showdiv(obj) {
         var x = obj.parentNode;//摘要;
         var y = x.nextSibling;//正文;
         x.style.display = "none";
         y.style.display = "block"
         };
         function hidediv(obj) {
         var y = obj.parentNode.parentNode;
         var x = y.previousSibling;
         x.style.display = "block";
         y.style.display = "none";
         }*/
        function showdiv(obj){
            var x=obj.parentNode;//摘要
            var y=nextnode(x.nextSibling);//正文
            x.style.display="none";
            y.style.display="block"
        }
        function hidediv(obj){
            var y = obj.parentNode.parentNode;//这才是正文
            var x = prevnode(y.previousSibling);//摘要
            console.log(x)
            console.log(y)
            x.style.display="block";
            y.style.display="none";
        }
        function nextnode(node){
            if(node.nodeType == 1){ //判断是否是元素节点,排除空的文本节点
                return node;
            }
            if(node.nextSibling){
                return nextnode(node.nextSibling);
            }
        }
        function prevnode(node){    //新增加函数
            if(node.nodeType == 1){ //判断是否是元素节点,排除空的文本节点
                return node;
            }
            if(node.previousSibling){
                return prevnode(node.previousSibling);
            }
        }
    </script>


查看完整回答
反对 回复 2016-09-13
?
OlderSkee

TA贡献123条经验 获得超103个赞

 。。控制content的高度来显示隐藏吧。。

话说你为什么不直接获取id 或者 是TagName来获得元素呢。。

用节点代码的可读性太差了。。

查看完整回答
3 反对 回复 2016-09-13
  • 2 回答
  • 0 关注
  • 1686 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信