Jquery – 在已知元素之后找到下一个输入:text元素
我有
input:text
元素,而不管其间是否有任何其他标记。 我可以在这种情况下使用jQuery选择器吗?
例如 :
// This is what I want to get to.
我觉得这个问题非常有趣。 似乎其他人正在读这个,找到兄弟姐妹的下一个输入。 但我把它看作是 – 无论如何,找到我的下一个输入。 我不知道它是在兄弟姐妹,父母还是父母的兄弟姐妹中。 这是我根据我从这个问题收到的反馈提出的 。
//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")