2009-07-22 63 views
1

我有兴趣编写一个非常通用的脚本,我可以将其包含到我的主页中,该脚本将重点放在页面上的第一个文本框中,而不管页面布局和内容。会有这样的工作吗?用jQuery查询“第一个”文本框的可靠方式

$(function() { 
    $("input[type='text']:first").focus(); 
}); 

我很担心,“第一”只是无论是它找到使用任何索引机制jquery的内部使用,而不是第一个文本框的第一个文本框(即最顶部,最左边的屏幕上)

谢谢!

回答

3

如果你需要知道的tabindex/DOM顺序不化,但基于CSS的位置,那么你可以尝试这样的事:

var firstBox = null; 
$("input[type='text']").each(function() 
{ 
    if (firstBox == null) { 
     firstBox = $(this); 
    } 
    else { 
     if ($(this).offset().top < firstBox.offset().top || ($(this).offset().top == firstBox.offset().top && $(this).offset().left < firstBox.offset().left)) { 
      firstBox = $(this); 
     } 
    } 
}); 
1

从我所知道的,你写的是非常正确的。 jQuery的选择器:first使用跨越DOM树时遇到的第一个元素。我相信这里没有专有的方法,只是一个简单的树遍历。

1

您的选择器是正确的。 jQuery的选择器引擎(Sizzle)使用CSS选择器,而CSS:第一个psuedoselector将始终选择文档流中的第一个(即源代码中最高的那个)。

+0

听起来好像他希望基于位置的,而不是基于DOM的遍历。 – tvanfosson 2009-07-22 14:29:44

2

如果您使用CSS在页面上移动东西,那么您可能需要搜索每一个并找到具有最小正向左上位置的输入。如果你的输入是按照DOM的顺序,那么你可以使用你的问题中的方法。最简单的方法就是用一个类标记你想要的输入,这样你就可以很容易地找到它。

<input type="text" id="rightBox" style="float: right;" /> 
<input type="text" id="leftBox" class="chooseMe" /> 

... 

var firstText = $('input[type=text].chooseMe')[0]; 

firstText.focus(); 
相关问题