Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅显示div的第一行文本并单击展开?_Javascript_Jquery_Css - Fatal编程技术网

Javascript 如何仅显示div的第一行文本并单击展开?

Javascript 如何仅显示div的第一行文本并单击展开?,javascript,jquery,css,Javascript,Jquery,Css,我只想显示包装文本块的第一行,然后单击显示整个块。另外,我想知道如何在第二次单击时将其切换回紧凑的单线版本 有没有一种简单的方法可以通过css+javascript实现这一点?我使用jQuery。第一行 <div id='a' onclick='toggletext'>first line<br /></div> function toggletext(){ var html= document.getElementById('a').innerHTM

我只想显示包装文本块的第一行,然后单击显示整个块。另外,我想知道如何在第二次单击时将其切换回紧凑的单线版本

有没有一种简单的方法可以通过css+javascript实现这一点?我使用jQuery。

第一行
<div id='a' onclick='toggletext'>first line<br /></div>

function toggletext(){
   var html= document.getElementById('a').innerHTML;
   if(html=='first line<br />'){
       html = 'first line<br />next lines<br />next lines<br />';
   }else{
       html = 'first line<br />';
   }
   document.getElementById('a').innerHTML = html
}
函数toggletext(){ var html=document.getElementById('a').innerHTML; 如果(html==“第一行
”){ html='第一行
下一行
下一行
'; }否则{ html='第一行
'; } document.getElementById('a')。innerHTML=html }

可以对其进行优化,并使其使用一种常见的lib,您可以使用一些jQuery来实现这一点

<div id="a">
    <span id="first">This is the first line (read more)</span>
    <br />
    <span id="rest">This is the rest of the text</span>
</div>

使用CSS+JavaScript很容易做到这一点。只需将div的高度设置为单行的高度,并隐藏所有溢出。然后,当用户单击div时,使用一个漂亮的动画处理程序来执行向下隐藏或其他类似效果,以显示div的全部内容


下面是一个非常基本的示例(无动画):

在CSS中,将div的大小设置为行的大小(重要提示:您可能需要使用行距属性在第二行的底部获得适当的填充)

我不知道如何单击,但您可以在CSS中使用
:hover
来更改样式(重置行距、重置div大小和溢出到适当的值),以获得悬停显示效果


或者您可以使用JavaScript并在单击时更改CSS(使用jQuery很容易)

将我的评论作为答案发布:

另一种方法是,定义类
高度:1em;溢出y:隐藏然后使用javascript单击添加/删除它


或者您也可以在
:active
-伪类中处理它,方法是使用
-标记包装
,这样就不需要javascript了。但是一旦失去焦点,div就会再次崩溃。

假设您不想使用任何JavaScript库(这很奇怪)

请参见:

HTML:

<div id="content"></div>
#content {
    border: 1px solid red;
    height: 1em;
    padding: 2px; /* adjust to taste */
    overflow: hidden    
}
document.getElementById("content").onclick = function() {
    this.style.height = 'auto';
}
JavaScript:

<div id="content"></div>
#content {
    border: 1px solid red;
    height: 1em;
    padding: 2px; /* adjust to taste */
    overflow: hidden    
}
document.getElementById("content").onclick = function() {
    this.style.height = 'auto';
}

或者,如果您想使用JavaScript框架,例如,可以对其设置动画

请参见:


这就足够了:

要隐藏除第一行以外的所有行,请执行以下操作:

var theDiv = document.getElementById('theDiv');
theDiv.style.overflowY = 'hidden';
theDiv.style.height = '1em';
要显示所有文本,请执行以下操作:

var theDiv = document.getElementById('theDiv');
theDiv.style.overflowY = 'visible';
theDiv.style.height = 'auto';
或者,如果要使用jQuery:

$('#theDiv').css({ height: '1em', overflowY: 'hidden' });

$('#theDiv').css({ height: 'auto', overflowY: 'visible' });

将div的hide设置为1em,然后exapnd it onclick就是解决方案

看看这个。我没有使用任何JS库

CSS

HTML

这是小提琴

$(文档).on('click','.collappable',函数(){
$(this.toggleClass('collapsed');
});
p{
光标:指针;
}
.崩溃{
空白:nowrap;
溢出:隐藏;
文本溢出:省略号;
}

我只想显示一块包装文本的第一行,然后单击显示整个块。另外,我想知道如何在第二次单击时将其切换回紧凑的单线版本。 有没有一种简单的方法可以通过css+javascript实现这一点?我使用jQuery

<div id='a' onclick='toggletext'>first line<br /></div>

function toggletext(){
   var html= document.getElementById('a').innerHTML;
   if(html=='first line<br />'){
       html = 'first line<br />next lines<br />next lines<br />';
   }else{
       html = 'first line<br />';
   }
   document.getElementById('a').innerHTML = html
}

我只想显示一块包装文本的第一行,然后单击显示整个块。另外,我想知道如何在第二次单击时将其切换回紧凑的单线版本。 有没有一种简单的方法可以通过css+javascript实现这一点?我使用jQuery

<div id='a' onclick='toggletext'>first line<br /></div>

function toggletext(){
   var html= document.getElementById('a').innerHTML;
   if(html=='first line<br />'){
       html = 'first line<br />next lines<br />next lines<br />';
   }else{
       html = 'first line<br />';
   }
   document.getElementById('a').innerHTML = html
}

我只想显示一块包装文本的第一行,然后单击显示整个块。另外,我想知道如何在第二次单击时将其切换回紧凑的单线版本。


有没有一种简单的方法可以通过css+javascript实现这一点?我使用jQuery。

不太确定,但我想
高度:1em
应该可以显示第一行。对于扩展,我认为javascript是必要的。无论采用何种解决方案,加载后应尽快在JS中添加一个类来隐藏内容。然后,如果禁用JS,内容仍将显示。仅供参考,使用屏幕阅读器的盲人和弱视者,以及禁用CSS的用户,以及搜索机器人和他们的缓存将可以访问整个内容,而无需单击。根据你的需要,可能是好的,也可能是坏的。OP说他在div中包装了(如“word包装”)文本,而不是有明显换行符的文本。@Delan,我想你不喜欢jQuery?;-)这只是一种选择。感谢您的评论。
$(.expander”)。单击(function(){$(this.toggleClass(“expander”);})您能否修改您的答案,以显示如何在第二次单击时将展开切换回紧凑尺寸?您仍然需要帮助吗?您使用的是纯JavaScript解决方案还是jQuery解决方案?我使用的是jQuery。谢谢你的帮助@thirtydot这个功能非常出色,但是我有没有办法通过单击div中的链接(比如“更多…”)而不是div本身来实现它?@elendilhthall:假设您使用的是jQuery版本,比如:
<div id='a' onclick='toggletext'>first line<br /></div>

function toggletext(){
   var html= document.getElementById('a').innerHTML;
   if(html=='first line<br />'){
       html = 'first line<br />next lines<br />next lines<br />';
   }else{
       html = 'first line<br />';
   }
   document.getElementById('a').innerHTML = html
}