【发布时间】:2018-07-18 18:33:24
【问题描述】:
我正在使用 jquery 创建一些带有动态数据的卡片。有一个描述属性是否适合卡。当它不适合时,我想保持卡片与其他卡片相同的大小,但添加一个“显示更多/更少”按钮,该按钮将展开卡片以显示其余说明。
我创建了一个fiddle,显示了卡片的创建以及我到目前为止所做的尝试。
此时我有一个函数checkTruncation,它将检查文本是否适合其容器。这个问题似乎依赖于元素尚未渲染的事实,因此它们的宽度为 0,这使得函数始终返回 true。
函数如下:
let checkTruncation = function (jqueryElement) {
var $element = jqueryElement;
if ($element) {
var $c = $element
.clone()
.css({ display: 'inline', width: 'auto', visibility: 'hidden' })
.appendTo('body');
let truncated = $c.width() > $element.width()
console.log($c.width(), $element.width(), $c.width() > $element.width())
$c.remove();
return truncated;
}
return false;
}
另外,除了我重新发明轮子之外,是否有任何建议的库可以实现此功能?我知道我见过这样的行为,但不记得在哪里。
更新
在上面的小提琴中,我只是调用了 getCard 函数,它负责为卡片提供模板,两次只是为了展示一些示例。在现实生活中,当用户单击按钮时,我通过 ajax 获取数据并使用以下内容填充卡片:
$('.fetchButton').on('click', function(){
$.get(url, filter)
.done(function (data) {
jQuery.each(data, function (index, item) {
$('.container').append(getCard(item));
})
}
})
更新 2
在 @LGSon 的帮助下,我来到了这个 scenario,它主要使用 CSS 来实现我所需要的。给出的答案仍然有效并且确实解决了我的问题,所以我会保留它作为答案。
【问题讨论】:
-
你有没有试过调用$(document).ready(function(){});中的checkTruncation函数?
-
@BrankVictoria 卡片通常是通过基于用户交互的 ajax 调用创建的。所以他们没有准备好文件。
-
那你在哪里调用 checkTruncation 函数呢?我相信您在 ajax 调用的“成功”中调用它。
-
@BrankVictoria 我有一个小提琴链接。在示例中,我没有使用 ajax,只是调用容器的追加。但是您可能会想象,在从服务器获取结果后,追加将发生在 ajax 调用的完成或成功中。我将更新问题以使这一点更清楚。
标签: javascript jquery