我确定在确定图像是横向还是纵向后,将图像添加到图像中。我遇到的问题是该类正被添加到img
标记,如img.landscape
,这显然没有正确注册。我该如何正确实现这一目标:<img class="landscape"
?
$(data.images).each(function(j, imageURL){
var thumbnail = new Image();
thumbnail.src = imageURL;
thumbnail.onload = function() {
$('.images').append('<div class="image_mask"><a href="' + imageURL + '"><img src="' + imageURL + '"/></a></div>');
if (thumbnail.width > thumbnail.height){
$(this).addClass('landscape');
}
};
});
我之前的解决方案是包含一个if / else语句,并在附加的字符串中添加了类,但我想知道是否有更简洁的方法来处理它。谢谢!
编辑 -
答案 0 :(得分:0)
我假设您要在<img>
标记中添加一个类,之前您正在动态创建几行?如果是这样,你可以这样做:
$('.image_mask img').addClass('landscape');
因为它在一个循环中并且你将有多个div.image_mask
,所以使用数组索引j
作为类限定符:
$(data.images).each(function(j, imageURL){
...
thumbnail.onload = function() {
$('.images').append('<div class="image_mask image_mask' + j + '"><a href="' + imageURL + '"><img src="' + imageURL + '"/></a></div>');
// ^^^^^^
if (thumbnail.width > thumbnail.height){
$('.image_mask' + j + ' img').addClass('landscape');
// ^^^^^^
}
};
});
<强>更新强>
即使这被接受了,但是像我最初建议的那样添加类名对我来说感觉很笨拙。更简洁的方法是将j
数组索引变量与jQuery的eq
函数结合使用,以找到相关的图像掩码:
$('.images .image_mask').eq(j).addClass('landscape');
..然后取消整个类的添加方法。
答案 1 :(得分:0)
将它放在你的字符串构建
中$(data.images).each(function(j, imageURL){
var thumbnail = new Image();
thumbnail.src = imageURL;
thumbnail.onload = function() {
var orientationClass = thumbnail.width > thumbnail.height ? "landscape" : "portrait";
$('.images')
.append(
'<div class="image_mask"><a href="' +
imageURL +
'"><img class="' +
orientationClass +
'" src="' +
imageURL +
'"/></a></div>'
);
};
});
修改:更多选项
如果你想让它更冗长,更清洁,你可以逐个构建元素:
var $img = $('<img />', {
class: thumbnail.width > thumbnail.height ? "landscape" : "portrait",
src: imageUrl
});
var $a = $('<a />', {
href: imageUrl,
}).append($img);
var $div = $('<div />', {
class: "image_mask"
}).append($a);
$('.images').append($div);
或者如果你想使用更有效的字符串构建,但是它更具可读性/性能,你可以使用连接来做一个数组:
var contents = [
'<div class="image_mask"><a href="',
imageURL ,
'"><img class="',
orientationClass,
'" src="',
imageURL,
'"/></a></div>'];
$('.images').append(contents.join(''));