Javascript 对Jquery返回的HTML元素进行排序
可能重复:Javascript 对Jquery返回的HTML元素进行排序,javascript,jquery,asp.net,html,focus,Javascript,Jquery,Asp.net,Html,Focus,可能重复: 技术:Asp.net与jQuery。 嗨,极客们, 概述: 我是一个jQuery noob,我一直在开发这个jQuery脚本,以使OneNet按键移动到下一个输入元素(textarea、select、input等),我尝试了自己的几种解决方案,甚至尝试了在线可用的解决方案,但每种解决方案都有一些弱点或局限性,我终于找到了一个对我来说足够好的解决方案,但它仍然存在一些问题 问题: 我已经查询了所有具有属性[tabindex]的元素,现在jquery返回DOM中的所有元素,因为它们在它
技术:Asp.net与jQuery。
嗨,极客们,
概述:
我是一个jQuery noob,我一直在开发这个jQuery脚本,以使OneNet按键移动到下一个输入元素(textarea、select、input等),我尝试了自己的几种解决方案,甚至尝试了在线可用的解决方案,但每种解决方案都有一些弱点或局限性,我终于找到了一个对我来说足够好的解决方案,但它仍然存在一些问题 问题:
我已经查询了所有具有属性[tabindex]的元素,现在jquery返回DOM中的所有元素,因为它们在它们的层次结构中存在,但是我希望元素按照它们的tabindex排序 1)因此需要对元素进行排序,以便我可以根据tabindex而不是其层次结构移动到下一个元素。
2)如果任何元素被设置为readonly=“readonly”或disabled=“disabled”,那么该元素根本不应该获得焦点 我不想把Jquery和HTML代码放在问题上,所以我创建了 让我知道如何解决这个问题。
P.S:告诉我你们需要更多信息。
我对任何节点数组进行排序的方法都很简单
首先,循环遍历节点列表并构建一个数组。每个数组元素都是[元素,排序依据]
。在本例中,[element,element.tabIndex]
然后,将sort
与回调一起使用:
arr.sort(function(a,b) {return a[1]-b[1];});
这将按照每个数组的第二个元素进行排序,这是排序的依据
(可选)使用map
将每个数组元素转换为其第一个元素(arr.map(函数(a){returna[0];});
)
您现在拥有了已排序的元素数组。我对任何节点数组进行排序的方法都很简单 首先,循环遍历节点列表并构建一个数组。每个数组元素都是
[元素,排序依据]
。在本例中,[element,element.tabIndex]
然后,将sort
与回调一起使用:
arr.sort(function(a,b) {return a[1]-b[1];});
这将按照每个数组的第二个元素进行排序,这是排序的依据
(可选)使用map
将每个数组元素转换为其第一个元素(arr.map(函数(a){returna[0];});
)
现在您有了已排序的元素数组
注:无耻地窃取了@Kolink的想法
$(文档).ready(函数(){
var arr=$(“:input[tabindex]:not('[disabled=disabled],[readonly=readonly]')”;//这将为您提供未禁用或只读的输入元素
//正如Kolink在回答中提到的,使用javascript数组的.sort函数根据选项卡索引对数组进行排序
var newArr=arr.sort(函数(a,b){
返回a[1]-b[1];
});
控制台日志(newArr);
$(newArr[0]).select().focus();//对tabindex=1的元素进行聚焦
var$currentFocus=0;//将currentFocus指针设置为排序数组的第一个元素
var$arrLen=newArr.length;
$(':input').live(“keydown”,函数(e){不要使用.live,因为它已被弃用,但我将暂时使用它,请参阅答案末尾指向.delegate的链接
如果(e.which==13)//输入key
{
e、 预防默认值();
如果($currentFocus
注:无耻地窃取了@Kolink的想法
$(文档).ready(函数(){
var arr=$(“:input[tabindex]:not('[disabled=disabled],[readonly=readonly]')”;//这将为您提供未禁用或只读的输入元素
//正如Kolink在回答中提到的,使用javascript数组的.sort函数根据选项卡索引对数组进行排序
var newArr=arr.sort(函数(a,b){
返回a[1]-b[1];
});
控制台日志(newArr);
$(newArr[0]).select().focus();//对tabindex=1的元素进行聚焦
var$currentFocus=0;//将currentFocus指针设置为排序数组的第一个元素
var$arrLen=newArr.length;
$(':input').live(“keydown”,函数(e){不要使用.live,因为它已被弃用,但我将暂时使用它,请参阅答案末尾指向.delegate的链接
如果(e.which==13)//输入key
{
e、 预防默认值();
如果($currentFocusThis可以帮助你:这可以帮助你:谢谢你的输入,但是noobs需要更多的解释:)谢谢你的输入,但是noobs需要更多的解释:)@Jhon你必须投票给Kolink,他值得:),我只是验证你的小提琴:输入[tabindex]'我只想选择具有tabindex的元素attribute@Jhon.delegate是的更新。live,谢谢that@Jhon你必须投票给Kolink,这是他应得的:),我只是在验证你的小提琴:“输入[tabindex]”我只想选择有tabindex的元素attribute@Jhon.delegate是的更新。live,谢谢