找到上一个按钮的ID

时间:2011-11-17 07:39:27

标签: javascript jquery

我正在寻找上一个按钮的ID。它相当遥远 - 目标和按钮之间有很多表行,表格,div等,但我认为这仍然有用:

alert( $(this).prevAll("input[type=button]").attr('id') );

不幸的是,这会返回警报“未定义”。帮助

6 个答案:

答案 0 :(得分:2)

这种查找可能很昂贵。如何对所有输入[type = button]元素进行选择,并遍历该数组,直到找到与您的id匹配的元素。然后你可以简单地引用数组索引 - 1来得到答案。

答案 1 :(得分:2)

function getPrevInput(elem){
    var i = 0,
        inputs = document.getElementsByTagName('input'),
        ret = 'Not found';
    while(inputs[i] !== elem || i >= inputs.length){
        if(inputs[i].type === 'button'){
            ret = inputs[i];
        }
        i++;
    }
    return (typeof ret === 'string') ? ret : ret.id;
}

这可能不是最有效的解决方案,但它是我唯一能想到的解决方案。它的作用是遍历所有input元素,并在传递给函数的元素之前找到它。您可以像这样使用它,假设您正确调用它并且this是输入元素:

getPrevInput(this);

Demo

答案 2 :(得分:1)

上一个按钮是当前按钮的兄弟吗?如果没有,prevAll()将无效。 prevAll()

的说明
  

获取匹配元素集中每个元素的所有前面的兄弟,可选择由选择器过滤。

根据您的DOM结构,您可以使用parents()的组合,然后使用find()

答案 3 :(得分:1)

此函数查找所有input[type=button]元素,并使用jQuery index函数查找此组中的当前元素。 如果找到它并且有一个前一个元素则返回它。

$.fn.previousElem = function(lookup){
    var $elements = $(lookup),
        index = $elements.index(this);
    if(index > 0){
       return $elements.eq(index-1)
    }else{
      return this;
    }
}

HTML:

<div><div><div><div>
    <input type=button id=1 value=1 />
</div></div></div></div>

<div><div><div><div>
    <input type=button id=2 value=2 />
</div></div></div></div>

JS:

alert ($("#2").previousElem('input[type=button]').attr('id'))

http://jsfiddle.net/SnScQ/1/

答案 4 :(得分:1)

这里是Amaan代码的不同版本,但jqueryfied和他的解决方案并没有找到按钮。解决方案的关键是jQuery按文档顺序返回元素,document.getElementsByTagName和类似函数也是如此。

var button = $('#c');
var prevNode;
$("input[type=button]").each(function() {
    if (this == button[0]) {
      return false;
    }
    prevNode = this;
});
alert(prevNode && prevNode.getAttribute('id'));

http://jsfiddle.net/crFy6/

答案 5 :(得分:1)

你尝试过.closest吗? ...

alert( $(this).closest("input[type=button]").attr('id') );