这实际上工作正常,但after()
只会在下一个li
是 4n+4 孩子时执行。即从一开始,如果您单击 3或7,它将正常工作。在您单击 3 之后,第 7 个将停止工作,而第 6 个将改为工作,因为 7 现在已成为第 8 个元素。
有点笨拙的更新:http: //jsfiddle.net/hYE7e/3/
$("ul li:nth-child(4n)").addClass("last-in-line");
$("li").click(function () {
$(this).nextAll("li.last-in-line").andSelf(".last-in-line").filter(":first").after('<li class="full">new full width item</li>');
});
andSelf(".last-in-line").filter(":first")
以确保单击第 4、第 8 等元素将起作用。
更新:
在评论中讨论后,我想我有它:http: //jsfiddle.net/hYE7e/7/
使用自定义过滤器:
$("li").click(function () {
var myIndex = $("li:not(.full)").index($(this)); // Save our position in a row
$(this)
.nextAll("li:not(.full)")
.andSelf()
.filter(function(index){ // Get 4n'th lis from 'not(.full)' set
return (index + myIndex + 1) % 4 == 0;
})
.add("li:last") // Make sure last rows will work
.first() // Only add 'li' after first matching element
.after('<li class="full">new full width item</li>');
});