我有一个图像“上传器”,它可以将图像转换为base64,并在上传器内显示为缩略图。我已经设置好了,这样你就可以在完成一批后通过拖动更多的图像来添加它,它只会添加到数组中,并显示更多的图像。
我有一个jQuery函数来限制文件名上的字符显示在图像下的图像下,一个“显示更多”按钮将显示隐藏的文本。我试图在每次添加新的一批图像时启动此功能,但我正在努力弄清楚如何做到这一点。
下面是我的jQuery函数以及我需要修改以触发此jQuery的js函数的相关位(我仍在学习这里的礼仪......不确定是否可以只发布相关位,以便我不会不必要地创建一个巨大的文本墙)。
还有Working JSFiddle(我目前已经把这个jQuery函数放在一个5秒的计时器上,这样我就可以在它触发之前快速地放入一个图像,以确保它正在工作,以及顶部的一些文本,以确保它也在工作。)但是我只是在语法上挣扎,以便在将每个图像添加到数组中时触发它。任何提示将不胜感激。
编辑:澄清一下,到目前为止,一旦jquery函数触发一次,它只会截断现有图像下的文本,之后添加的任何文本都不受影响,它们的标题显示完整的文本字符串。我正试图限制文本,并添加一个“阅读更多”按钮的所有图像添加。因此,我的印象是,每次添加新的图像块时,我都需要触发此功能。如果这不是最好的方法,或者我没有很好地解释,我道歉。
JQ
$(document).ready(function(){
var maxLength = 5;
$(".show-read-more").each(function(){
var myStr = $(this).text();
if($.trim(myStr).length > maxLength){
var newStr = myStr.substring(0, maxLength);
var removedStr = myStr.substring(maxLength, $.trim(myStr).length);
$(this).empty().html(newStr);
$(this).append(' <a href="javascript:void(0);" class="read-more">read more...</a>');
$(this).append('<span class="more-text">' + removedStr + '</span>');
}
});
$(".read-more").click(function(){
$(this).siblings(".more-text").contents().unwrap();
$(this).remove();
});
});
JS
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onloadend = () => {
//image and file name
let imageContainer = document.createElement("figure");
let img = document.createElement("img");
img.src = reader.result;
imageContainer.appendChild(img);
imageContainer.innerHTML += `<div class="caption"><p class="show-read-more" id="caption">${name}</p></div>`;
imageDisplay.appendChild(imageContainer);
1条答案
按热度按时间nbysray51#
我已经创建了一个你的代码的分支,我认为问题已经解决了:https://jsfiddle.net/ahvonenj/v1nyLzbs/13/
我从代码的底部删除了一些东西,现在它只是这样:
由于这些
.read-more
元素在文档加载时并不存在,因此我们不能将click事件处理程序直接绑定到它们。相反,我们将click事件处理程序绑定到文档,并提供.read-more
选择器,如图所示。这里最好使用
$(e.originalEvent.target)
而不是$(this)
,原因我现在不记得了,因为我已经很久没有使用jQuery了,但我记得它就是这样做的。我在CSS代码的底部添加了一个简单的
hidden
类:因为我把你的
fileHandler
函数改成了这样:它现在检查文件名的长度,并输出“阅读更多”按钮的HTML和单击按钮时将显示的元素。单击按钮时显示的元素最初是隐藏的,具有
hidden
类的元素。当单击“阅读更多”按钮时,我们将删除隐藏类,同时也将删除“阅读更多”按钮。如果文件名不是太长,文件名会正常显示在图片下面。
我一直想对新的jQuery开发人员说的一件事是不要混淆
$()。它没有什么特别之处,使用它不会把你带到一些与JavaScript分离的“jQuery世界”。
$()是一个普通的JavaScript函数,但函数名只是
$`。你几乎可以用以下命令来创建你自己的jQuery:显然,这是一个非常简化的例子,但重点是要显示
$()
的非特殊性质。混淆来自jQuery用自己的各种东西 Package$
函数的结果,所以它更像是:这样有用吗