我目前遇到以下问题,我想更优雅地解决这个问题:
我的脚本工作如下:
- 接受一个元素
- 通过使用将元素放入容器(定义为
var container = $('<div></div>'
).append()
- 跟踪容器“装满”的距离
- 如果容器已满,则换
clone
一个新容器并继续那里 - 重复此操作,直到处理完每个元素
现在,这需要我跟踪一个“填充”(和一个“最大值”)变量来确定容器被填充了多远。所以每次我做一个append()
,我都必须增加这些计数器。
现在,对我来说更优雅的是让container
对象变得智能,并使其能够“挂钩”到append()
事件中:每当附加一些东西时,容器对象本身就会执行一些代码(增加它自己的计数器,决定它是否已满,如果是,则返回一个新的空容器)。
我想通过创建一个返回容器的函数来解决这个问题:
var container = {
template : $('<div class="container"></div>'),
containers : [],
get : function (i) {
if (!this.containers[i]) {
this.containers[i] = this.template.clone()
.addClass('container-'+i)
.data('max', 500); //this determines the maximum (px) the container can hold
}
return this.containers[i];
}
};
这很有效,因为我现在可以遍历所有元素,并调用container.get(i).append(element)
每个元素(同时单独计算高度并将其与 进行比较container().get(i).data().max
),稍后在脚本中,当我需要输出时,我可以返回container.containers
对象。
但是我无法让它具有container.get
“监视”append()
并对其采取行动的功能。我知道这不是 jQuery 的工作方式,但我确信除了在元素迭代器中保留本地计数器之外,还有另一种方法。
我尝试的另一件事是尝试.on($.append, function() { //do stuff });
在容器上设置,但那是一个白日梦..
我希望我已经清楚地解释了一切,并且很想知道是否有人对此有解决方案。
请参阅this fiddle以获取“工作”示例(我高度怀疑我的编程技能)