jquery解雇问题

时间:2009-09-23 19:48:45

标签: jquery css function jquery-1.3

我正在使用一个函数来均衡从数据库返回的li标签的高度。我也在使用jquery根据它们在一行中的位置来分配某些新的类。

基本上我的问题是jquery语句的定位部分总是有效,但是相等的高度部分有时不会触发,实际上它通常不能在空缓存上工作 - 但是它总会在刷新或第二次访问时触发到页面。

这里的实例Link here!(让我知道它是否适合你!)

我正在使用的jquery代码如下所示。

    jQuery.fn.equalCols = function(){
    //Array Sorter
    var sortNumber = function(a,b){return b - a;};
    var heights = [];
    //Push each height into an array
    $(this).each(function(){
        heights.push($(this).height());
    });
    heights.sort(sortNumber);
    var maxHeight = heights[0];
    return this.each(function(){
        //Set each column to the max height
        $(this).css({'height': maxHeight});
    });
};

jQuery(document).ready(function($) {
        $(".thumbs").each(function(i) { 
        if (i % 4 == 0) 
           $(this).addClass("start");
        if (i % 4 == 3) 
           $(this).addClass("end");
    });
    $(".thumbs").each(function(i) { 
        if (i % 3 == 0) 
           $(this).addClass("start");
        if (i % 3 == 2) 
           $(this).addClass("end");
           });
    $(".event_thumbs").each(function(i) { 
        if (i % 2 == 0) 
           $(this).addClass("start");
           });
$('.thumbs, .end, .start').equalCols();
});

如果您对代码或方法有更好的建议以实现目标,请大声喊叫,或者如果您知道如何使其发挥作用 - 我爱你。

2 个答案:

答案 0 :(得分:2)

也许是在最后一个循环中没有将它包装在jQuery中的问题?此外,您只需要跟踪迭代所见的最大值。将高度放入数组并对其进行排序似乎效率低下。

jQuery.fn.equalCols = function(){
    var maxHeight = 0;
    $(this).each(function(){
        var height = $(this).height();
        if (height && height > maxHeight) maxHeight = height;
    });

    return $(this).each(function(){
        //Set each column to the max height
        $(this).css({'height': maxHeight});
    });
};

更新:由于页面上有图像,因此等到文档加载还不够,还需要等到图像加载完毕。或者,更好的是,在每个图像加载后简单地均衡 - 这样你就可以确保在完成所有图像之后这样做。因为如果在应用图像之前加载图像将不会调用加载处理程序(例如,它可能在用户的缓存中并且比javascript执行更快地加载),所以设置一个计时器以在指定之后触发equalCols函数覆盖不为任何图像调用加载处理程序的情况的时间量。将负载处理程序保留在图像上,然后如果将源更改为图像,则会重新应用它并再次均衡页面。

 $(function() {
     $('img').load( function() { /* equalize after every image load */
          equalize();
     });
     setTimeout( equalize, 2000 );  /* wait 2 secs, then equalize */
 });

 function equalize() {
     $('.thumbs, .end, .start').equalCols();
 }

答案 1 :(得分:1)

我做了类似的事情,因为自动高度可以根据类进行匹配...跨浏览器工作,但可能需要更新或插入。

 function level_it(elem_class)
 {
      var s = 0;
      var t  = 0;
      $('.'+elem_class).each(function(){
      if($(this).height() < s)
      {
         s = $(this).height();
      }
      if($(this).height() > t)
      {
           t = $(this).height();
      }
  });
  $('.'+elem_class).each(function(){
    $(this).height(t);
  });
}
$(document).ready(function(){
  level_it('pricing');
});