//assume you know where you are starting from
var $startElement = $('#foo');
//get all text inputs
var $inputs = $('input[type=text]');
//search inputs for one that comes after starting element
for (var i = 0; i < $inputs.length; i++) {
if (isAfter($inputs[i], $startElement)) {
var nextInput = $inputs[i];
alert($(nextInput).val());
}
}
//is element before or after
function isAfter(elA, elB) {
return ($('*').index($(elA).last()) > $('*').index($(elB).first()));
}
5条答案
按热度按时间qxsslcnc1#
我觉得这个问题很有意思。似乎其他人正在阅读这篇文章,在兄弟姐妹中找到下一个输入。但我把它读成-无论如何都要给我找到下一个输入。我不知道是兄弟姐妹,父母还是父母的兄弟姐妹。这是我根据这个问题得到的反馈得出的结论。
http://jsfiddle.net/GesSj/1
bwleehnv2#
查看:moved this into a more complete question and answer
基于@mrtsherman的awesome answer,我写了这个更完整的解决方案:
然后你可以这样使用它:
如果我知道我的代码已经正确优化,并且T谢尔曼先生同意的话,我会在jQuery lib上使用submit a PR,这意味着我认为这应该是jQuery的核心方法!:P
p5fdfcr13#
@Cawas - nice solution,但我建议不要过度使用,因为
$('*')
很贵;- )不管怎样,我根据自己的需要扩展了它:
因此,如果
returnItselfIfMatched
被设置为true
,如果它匹配选择器本身,则返回自身。如果您不知道调用的是哪个元素,并且您要搜索的正是它本身,那么这很有用。m2xkgtsf4#
TR's
之间不能有div
标记。它不是有效的标记。要从引用的
tr
中找到input
元素,可以尝试这样做。7eumitmz5#
你可以使用“next”: