查找前一个按钮的ID

find ID of previous button

本文关键字:一个 按钮 ID 查找      更新时间:2023-09-26

我正在寻找前一个按钮的id。这是相当远的-许多表行,表,div等之间的目标和按钮,但我认为这仍然会工作:

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

不幸的是,这返回警告'undefined'。帮助吗?

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);
演示

这种查找可能代价很高。对所有input[type=button]元素进行选择,并遍历该数组,直到找到与id匹配的元素。然后,您可以简单地引用数组index - 1来获得您的答案。

前一个按钮是当前按钮的兄弟按钮吗?否则,prevAll()将不起作用。prevAll()描述:

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

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

此函数查找所有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/

这是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/

你试过。close吗?…

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