【发布时间】:2018-05-10 03:53:26
【问题描述】:
@musicnothing 在较旧的thread 中建议的解决方案在内联 div 行下方显示一个内容 div,当单击 div.wrapblock 本身时,这很有效。
function placeAfter($block) {
$block.after($('#content'));
}
$('.wrapblock').click(function() {
$('#content').css('display','inline-block');
var top = $(this).offset().top;
var $blocks = $(this).nextAll('.wrapblock');
if ($blocks.length == 0) {
placeAfter($(this));
return false;
}
$blocks.each(function(i, j) {
if($(this).offset().top != top) {
placeAfter($(this).prev('.wrapblock'));
return false;
} else if ((i + 1) == $blocks.length) {
placeAfter($(this));
return false;
}
});
});
我遇到的问题。 我需要触发相同的效果,但通过将 click 事件添加到 wrapblock 本身的链接。
我的代码几乎相同。
我改变的是点击事件句柄,从 $('.wrapblock').click(function() 到 $('.more').on('click', function() 我还需要为内容 div 添加 .closest(".wrapblock") 以将其自身定位在 wrapblock 之外。
$('.more').on('click', function() {
...
if ($blocks.length == 0) {
placeAfter($(this).closest(".wrapblock"));
return false;
}
一切都可以看到和测试http://jsfiddle.net/7Lt1hnaL/
如果有人能阐明我如何使用偏移方法计算它需要遵循的块,那就太好了,在此先感谢。
正如您在最新的小提琴示例中所见,内容 div 未显示在 div 行下方。
我也很抱歉,我想在讨论帖上发帖,但我的发帖声望很小,这不让我发帖,谢谢。
【问题讨论】:
-
如果你想让它在所有 wrapblocks 之后,你为什么要把它移动到被点击的那个之后呢?还是我误解了您要做什么?
-
这就是问题所在。我需要计算并显示在该行中的最后一个 div 之后,而不是直接在单击的那个之后出现。因此,例如单击 1 时,它应该在 3 之后显示。如果我单击 5,它应该在 6 之后显示,依此类推,基于每行 3 个 div。因为它在顶部的第一个小提琴中起作用。
标签: javascript jquery html css