嗨,我正在寻找一个基于jQuery的等高列。我知道有很多这样的问题,但是,我的要求有点不同,。我想在一个超级菜单中使用这些,其中你大约有4-5个下拉菜单,每个下拉菜单都有3-4列。
我想要所有3-4列的高度相同,但不是在所有的下拉,因为列的高度将是不同的,在另一个下拉取决于该部分的内容。
我在MooTools中找到了一个解决方案,它非常适合我的需求。下面的MooTools代码使特定div中的所有列都等于其父div的高度。
MooTools代码:
var Equalizer = new Class({
initialize: function(elements) {
this.elements = $$(elements);
},
equalize: function(hw) {
if(!hw) { hw = 'height'; }
var max = 0,
prop = (typeof document.body.style.maxHeight != 'undefined' ? 'min-' : '') + hw; //ie6 ftl
offset = 'offset' + hw.capitalize();
this.elements.each(function(element,i) {
var calc = element[offset];
if(calc > max) { max = calc; }
},this);
this.elements.each(function(element,i) {
element.setStyle(prop,max - (element[offset] - element.getStyle(hw).toInt()));
});
return max;
}
});使用:
var columnizer = new Equalizer('.sizeMe').equalize('height'); //call .equalize() as often as you want!有人能帮我在jQuery中转换这段代码吗?实际上,我的整个模板都是基于jQuery的,只是对于这个等高函数,我不想加载另一个JavaScript库。
帮帮忙!
发布于 2010-12-07 17:11:04
是的,认为这可能是有用的,所以让它在一个jQuery插件为您。
演示:http://jsfiddle.net/AXqBb/
equalizer.js:
(function($) {
String.prototype.capitalize = function() {
return this.replace(/^(.)/, function (c) { return c.toUpperCase(); })
};
$.fn.equalize = function(hw) {
if (!hw) {
hw = 'height';
}
var max = 0;
var prop = (typeof document.body.style.maxHeight != 'undefined' ? 'min' + hw.capitalize() : hw);
var offset = 'offset' + hw.capitalize();
this.each(function() {
var calc = parseInt(this[offset]);
if (calc > max) {
max = calc;
}
});
this.each(function() {
$(this).css(prop, max - (parseInt(this[offset]) - $(this)[hw]()));
});
return max;
};
})(jQuery);像这样叫:
var maxHeight = $('.sizeMe').equalize('height');我保持代码尽可能类似于您发布的内容,这样您就可以看到更改,所以为任何不好的风格道歉-希望它可以归因于原作者。;-)
注意:我在此代码中添加了一个基本的首字母大写函数;如果已经定义了,则需要删除该函数。
https://stackoverflow.com/questions/4378314
复制相似问题