Javascript 使用jQuery查找元素在元素数组中的位置
我有两个数组,表示排序前后列表的状态:Javascript 使用jQuery查找元素在元素数组中的位置,javascript,jquery,Javascript,Jquery,我有两个数组,表示排序前后列表的状态: var $before = $('li'); // SORTING var $after = $('li'); 现在我想选择一个特定的项var$item=$after.filter(“:first child”)并找到它在$before列表中的位置。到目前为止,我所做的工作是有效的: var beforeIndex = false; $.each($before, function(i, v) { if($(v)[0] == $item[0])
var $before = $('li');
// SORTING
var $after = $('li');
现在我想选择一个特定的项var$item=$after.filter(“:first child”)
并找到它在$before列表中的位置。到目前为止,我所做的工作是有效的:
var beforeIndex = false;
$.each($before, function(i, v) {
if($(v)[0] == $item[0]) {
beforeIndex = i;
}
})
但是,我觉得应该有一个更简单的解决方案,比如:
$before.find(x => $(x)[0] == $item[0]);
(这不起作用)。有什么想法吗?:) 您可以按以下方式解决此问题。我试着用一个最小的例子
var$li=$(“ul>li”);
var$item=$li.filter(':last child');
var result=Array.prototype.findIndex.call($li,(li)=>{
返回$item.is($(li));
});
控制台日志(结果)代码>
- 一,
- 二,
- 三,
您可以通过以下方式解决此问题。我试着用一个最小的例子
var$li=$(“ul>li”);
var$item=$li.filter(':last child');
var result=Array.prototype.findIndex.call($li,(li)=>{
返回$item.is($(li));
});
控制台日志(结果)代码>
- 一,
- 二,
- 三,
只要使用一个数据属性,就不需要查找它了
//在lis上循环并使用索引设置数据属性
$(“li”)。每个功能(索引){
$(此).data(“原始索引”,索引)
})
//更改顺序的随机排序代码
$((“ul”).append($(“li”).sort(函数(){
返回Math.random()>.5?1:-1
}))
//在新排序的lis上循环并读取文本和旧索引
$(“li”)。每个(功能){
var elem=$(本);
console.log(elem.text(),elem.data(“orginalIndex”))
})
- 一,
- 二,
- 三,
- 四,
- 五,
只要使用一个数据属性,就不需要查找它了
//在lis上循环并使用索引设置数据属性
$(“li”)。每个功能(索引){
$(此).data(“原始索引”,索引)
})
//更改顺序的随机排序代码
$((“ul”).append($(“li”).sort(函数(){
返回Math.random()>.5?1:-1
}))
//在新排序的lis上循环并读取文本和旧索引
$(“li”)。每个(功能){
var elem=$(本);
console.log(elem.text(),elem.data(“orginalIndex”))
})
- 一,
- 二,
- 三,
- 四,
- 五,
如果$before
是jQuery对象(它是),请使用$before.each()
而不是$。each($before..)
$。each()
用于非jQuery对象。另外$(x)[0]
是无意义的。为什么不在每个对象上设置一个数据属性呢?还有$before.index($item)
可用于获取结果堆栈中元素的索引。@Taplar TIL。那是个好主意如果$before
是jQuery对象(它是),请使用$before.each()
而不是$。each($before..)
$。each()
用于非jQuery对象。而且$(x)[0]
是无点的。为什么不在每个对象上设置一个数据属性?还有$before.index($item)
可用于获取结果堆栈中元素的索引。@Taplar TIL。那是个好主意