jQuery如何在each()中提前查看
jQuery how does one peek ahead in each()?
我似乎找不到确切的答案。考虑以下内容:
var dupe = false;
$(".syndUID").sort(function(a,b) {
return a - b;
}).each(function(i, el) {
alert($(this).val() + " - " + $(this).next().val());
if($(this).val() == $(this).next().val()) {
dupe = true;
return;
};
});
此代码试图在syndUID
类的一组输入中查找重复值。它们分散在一个窗体中,因此在DOM中不相邻。
但是next().val()
总是未定义的。我用错函数了吗?我如何简单地向前看下一个元素?我可以访问索引,但我甚至不知道如何使用它。
编辑:
在阅读了评论和答案后,我意识到jQuery中真的没有合适的迭代器,这对我来说真的很愚蠢,因为它提供了each()。我在上面的代码中也有另一个错误。以下是我使用的有效的最终解决方案:
// duplicate check
var dupe = false;
var prevVal = undefined;
$(".syndUID").sort(function(a,b) {
return $(a).val() - $(b).val();
}).each(function() {
if($(this).val() == prevVal) {
dupe = true;
return false;
}
prevVal = $(this).val();
});
对于任何通过谷歌找到这一点的人来说,其他人提供的答案可能是一个不错的替代解决方案,但对于我的需求,我发现这已经足够了。
您可以执行类似$('.syndUID')[i+1]
的操作来重新标记列表,将重点放在该元素上(并可以选择将其返回为jQuery对象)
使用[i+1]
将返回DOM元素,但可以使用.eq(i+1)
返回jQuery对象。或者,如果您讨厌未来的开发人员,请将DOM元素封装在$()
中,因为它的可读性太差了!
正如安德里亚斯所说,重新编制这份名单是在浪费记忆。在循环之前,使用var element = $('.syndUID')
将对象缓存到一个变量中,这样就不会对DOM进行太多迭代。
next()
获取下一个同级,而不是下一个祖先或父级。
例如,如果我们有一个无序列表,next()的工作原理如下:
var a = $('#listone.first').next().val();
console.log(a) //outputs "Second"
<ul id="listone">
<li class="first">First</li>
<li class="second">Second</li>
</ul>
<ul id="listtwo">
<li class="third">Third</li>
<li class="fourth">Forth</li>
</ul>
因此,如果您正试图获取下一个父级,则应用于.next()的.val()将不起作用。我不知道你的输出是什么(表、UL、DIV等),所以很难给你一个有效的解决方案,但这可能是你的问题。您没有正确地遍历DOM。
好吧,你已经有了排序的数组,也许你不想用.each()
来做这件事,而只是使用一个简单的for
循环?
var elemArray = $(".syndUID").sort(function(a,b) {
return a - b;
});
for(var i = 0; i < elemArray.length; i++){
if(elemeArray[i].value == elemArray[i+1].value){
//do something with comparison
}
}
但是,这只会在数组中的下一个syndUID
元素中检查重复项。为了进行完整的搜索,您需要对照数组中的每个元素(不包括其本身)来检查每个元素。这将涉及一个嵌套循环,它将向函数添加n^2的顺序
- jquery.each(第2行)添加背景色
- 如何使用jQuery each分离字符串中的元素
- Jquery.each数组推送不起作用
- 鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
- jQuery each()没有'使用OOP方法是行不通的
- jQuery在.each中查找前面的元素标签
- jquery.each函数和传递变量
- Coffeescript jQuery each loop
- jQuery - setInterval with $.each
- Jquery.each,但仅限于当前元素
- jQuery数组参数和each()
- 如何将密钥与 JQuery $.each 循环中的字符串进行比较
- jquery .each 循环来执行每个数组项,它们之间有延迟
- 我是否错误地使用了jQuery .each函数
- .each jQuery 中的多个条件
- 使用$.each jquery创建ajax成功的html选择选项
- 跳出.each() jquery语句的最好方法是什么?
- 动态多级each() jQuery
- 从AJAX JSON响应中检索键,然后在.each() jquery中使用它
- 什么是'each'jQuery $.每一个循环