Jquery – 在已知元素之后找到下一个输入:text元素

我有

鉴于上述情况,是否可以找到下一个input:text元素,而不管其间是否有任何其他标记。 我可以在这种情况下使用jQuery选择器吗?

例如 :

       
// This is what I want to get to.

我觉得这个问题非常有趣。 似乎其他人正在读这个,找到兄弟姐妹的下一个输入。 但我把它看作是 – 无论如何,找到我的下一个输入。 我不知道它是在兄弟姐妹,父母还是父母的兄弟姐妹中。 这是我根据我从这个问题收到的反馈提出的 。

http://jsfiddle.net/GesSj/1

 //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())); } 

检查出来: 将其转移到更完整的问题和答案中

根据@mrtsherman的精彩答案 ,我写了这个更完整的解决方案:

 (function( $ ){ $.fn.findNext = function(sel) { var $result = $(sel).first(); if ($result.length <= 0) { return $result; } $result = []; var thisIndex = $('*').index($(this)); var selIndex = Number.MAX_VALUE; // Number.MAX_SAFE_INTEGER is not yet fully supported $(sel).each(function(i,val){ var valIndex = $('*').index($(val)); if (thisIndex < valIndex && valIndex < selIndex) { selIndex = valIndex; $result = $(val); } }); return $result; }; })( jQuery ); 

然后你可以这样使用它:

 $('#tagTR').findNext('input'); 

如果我知道我的代码已经正确优化并且T Sherman先生在那里可以正常,我会在jQuery lib上提交一个PR ,这意味着我认为这应该是jQuery的核心方法 ! :P

@Cawas – 很好的解决方案 ,但我建议使用它不要过多,因为$('*')很贵;-)

无论如何,我根据自己的需要扩展了它:

 (function( $ ){ $.fn.findNextOverall = function(sel, returnItselfIfMatched) { if(returnItselfIfMatched && $(this).is(sel)) return $(this); var $result = $(sel).first(); if ($result.length <= 0) { return $result; } $result = []; var thisIndex = $('*').index($(this)); var selIndex = Number.MAX_SAFE_INTEGER; $(sel).each(function(i,val){ var valIndex = $('*').index($(val)); if (thisIndex < valIndex && valIndex < selIndex) { selIndex = valIndex; $result = $(val); } }); return $result; }; })( jQuery ); 

因此,如果returnItselfIfMatched设置为true则返回自身,如果它与选择器本身匹配。 如果您不知道哪个元素正在调用并且您正在搜索它本身,则很有用。

TR's之间不能有div标签。 它不是有效的标记。

要从引用的tr查找input元素,您可以尝试这样做。

 $('#tagTR').nextAll().filter(function(){ return $(this).find('input:text').length > 1; }).find('input'); 

你可以使用“下一步”:

 $("#tagTR").next("input")