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

use*_*072 6 jquery element input next

我有一个id为给<tr id="tagTR"> 定上述,是否有可能找到下一个input:text元素,无论其间是否有任何其他标记.是否有一个jQuery选择器,我可以用于这种情况?

例如 :

<tr id="tagTR"> 
</tr>
<tr id="tagRed"> 

  <td> </td>
</tr>
<div>
 <tr>
   <td>
     <input> // This is what I want to get to. 
   </td>
 </tr>
</div>
Run Code Online (Sandbox Code Playgroud)

mrt*_*man 10

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

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()));
}
Run Code Online (Sandbox Code Playgroud)


cre*_*gox 5

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

基于该真棒答案@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 );
Run Code Online (Sandbox Code Playgroud)

然后你可以这样使用它:

$('#tagTR').findNext('input');
Run Code Online (Sandbox Code Playgroud)

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