我正在寻找上一个按钮的ID。它相当遥远 - 目标和按钮之间有很多表行,表格,div等,但我认为这仍然有用:
alert( $(this).prevAll("input[type=button]").attr('id') );
不幸的是,这会返回警报“未定义”。帮助
答案 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);
答案 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'))
答案 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'));
答案 5 :(得分:1)
alert( $(this).closest("input[type=button]").attr('id') );