jQuery均衡高度脚本只有在第一个元素最高时才有效吗?

时间:2015-08-06 08:26:22

标签: jquery

所以我在两个单独的文件中运行了两个JS块。第一个传递元素列表,第二个传递元素并找到最高的元素并将其应用于其余元素。一个相当基本的脚本真的,但我搞砸了某个地方。只要它遇到的第一个元素是最高的,该脚本就像魅力一样。如果它是第二个,则它将所有第二个元素的高度应用于所有这些......

有人可以检查我做了什么,并告诉我哪里出错了吗?

这两个脚本:

function equalizeFunction1(){
    var elements = [
        $('.element1'), 
        $('#element2')
    ]; 
    masterEqualizeHeights(elements);
}

手术背后的大脑:

function masterEqualizeHeights(arg){
    elements = arg;
    var maxHeight = 0;
    for (i = 0; i < elements.length; i++) {
        if(elements[i].height() > maxHeight){maxHeight = elements[i].height()}
    }
    for (i = 0; i < elements.length; i++) {
        elements[i].height(maxHeight)
    }
}

1 个答案:

答案 0 :(得分:1)

问题是你如何设计数组,你的数组有jQuery对象,可能包含多个元素,所以在for循环中你需要迭代jquery对象中的每个元素并检查高度,否则只有高度该集合中的第一个元素将被视为

在数组中,由于类选择器可以返回多个元素,因此需要遍历该jQuery对象中的每个项目,以便

function masterEqualizeHeights(arg) {
    var elements = arg;
    var maxHeight = 0;

    $.each(elements, function () {
        $(this).each(function () {
            var height = $(this).height();
            if (height > maxHeight) {
                maxHeight = height;
            }
        });
    });
    $.each(elements, function () {
        $(this).height(maxHeight);
    })
}

更简单的方法是

function equalizeFunction1() {
    masterEqualizeHeights($('.element1, #element2'));
}


function masterEqualizeHeights(els) {
    var maxHeight = 0;
    els.each(function () {
        if ($(this).height() > maxHeight) {
            maxHeight = elements[i].height()
        }
    });
    els.height(maxHeight)
}