如何使用jquery查找前一个元素高度

时间:2013-04-16 10:53:15

标签: javascript jquery

我有一个表定义如下:

<table>
    <tr>
        <td>
            <label>First</label>
        </td>
        <td>
            <input type='text' style='widht:200px; height:100px;' />
        </td>
        <td>
            <button class='but'></button>
        </td>
    </tr>
    <tr>
        <td>
            <label>Second</label>
        </td>
        <td>
            <select style='widht:100px; height:150px;'>
                <option>one</one>
            </select>
        </td>
        <td>
            <button class='but'></button>
        </td>
    </tr>
    <tr>
        <td>
            <label></label>
        </td>
        <td>
            <input type='text' style='widht:200px; height:100px;' />
        </td>
        <td>
            <button class='but'></button>
        </td>
    </tr>
    <tr>
        <td>
            <label>Third</label>
        </td>
        <td>
            <textarea style='widht:500px; height:200px;'></textarea>
        </td>
        <td>
            <button class='but'></button>
        </td>
    </tr>
</table>

然后点击按钮我想获得上一个控件的高度。所以我写了这段代码:

 $(".but").live('click',function(){
     alert($(this).prev().css('width'));
     alert($(this).prev().css('height'));
 });

但是警报显示的值是未定义的。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

使用:

var input = $(this).parent().prev().find("input");
if(input) { // You have a select, so this won't be found in all circumstances
    alert(input.css('width'));
    alert(input.css('height'));
}

答案 1 :(得分:0)

使用实数width()来获取元素的实际宽度,而不是css(.css('width'))中定义的宽度。这同样适用于身高:

$(".but").live('click',function(){
    alert($(this).prev().width());
    alert($(this).prev().height());
});

答案 2 :(得分:0)

事实上,按钮没有先前的目标。

如果你想要TD高度,你应该调用.parent()。

请注意你的HTML!

编辑:小提琴更新: http://jsfiddle.net/jVsRW/4/

$(".but").on('click', function() {
    // Of course display null for the first button that do not have a previous form element.
    alert($(this).closest('tr').prev().find('input, select, textarea').height());
});

答案 3 :(得分:0)

您可以尝试:jsFiddle

$(".but").live('click',function(){
     alert($(this).closest("tr").find('input').css('width')); 
     // OR
     //alert($(this).closest("tr").find('select').css('width'));     
});