jQuery如何在每个()中向前看?

dma*_*rra 8 javascript jquery

我似乎无法为此找到明确的答案.考虑以下:

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;
        };
    });
Run Code Online (Sandbox Code Playgroud)

此代码尝试在类的一组输入中查找重复值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();
    });
Run Code Online (Sandbox Code Playgroud)

对于通过谷歌找到这个问题的人来说,其他人提供的答案可能是一个不错的替代解决方案,但是根据我的需要,我发现这个问题已经足够了.

Ste*_*her 3

您可以执行类似$('.syndUID')[i+1]重新获取列表之类的操作,重点关注该元素(并可选择将其转回 jQuery 对象)

使用[i+1]将返回 DOM 元素,但您可以使用.eq(i+1)返回 jQuery 对象。或者,如果您讨厌未来的开发人员,请将 DOM 元素包装起来,$()因为可读性不好!

正如安德烈亚斯所说——重新获取列表是在浪费内存。在循环之前,将对象缓存到变量中,var element = $('.syndUID')这样就不会过多地迭代 DOM。