我有<tr id="tagTR">
的ID
鉴于上述情况,是否可以找到下一个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>
答案 0 :(得分:10)
我认为这个问题非常有趣。似乎其他人正在读这个,找到兄弟姐妹的下一个输入。但我把它看成是 - 无论如何,找到我的下一个输入。我不知道它是在兄弟姐妹,父母还是父母的兄弟姐妹中。这是我根据this question收到的反馈提出的。
//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()));
}
答案 1 :(得分:5)
基于awesome answer @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上submit a PR,这意味着我认为这应该是jQuery的核心方法! :P
答案 2 :(得分:1)
@Cawas - 很好solution,但我建议使用它不要过多,因为$('*')
很贵; - )
无论如何,我根据自己的需要进行了扩展:
(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
,它将返回自身,如果它与选择器本身匹配。如果您不知道哪个元素正在调用并且您正在搜索它本身就很有用。
答案 3 :(得分:0)
div
之间不能有TR's
代码。它不是有效的标记。
要从引用的input
中找到tr
元素,您可以试试这个。
$('#tagTR').nextAll().filter(function(){
return $(this).find('input:text').length > 1;
}).find('input');
答案 4 :(得分:-3)
您可以使用“下一步”:
$("#tagTR").next("input")