0

我有一个 DOM 元素数组,而不是 DOM 顺序。我怎样才能得到第一个,即在 DOM 中第一个出现的那个?

如果 jQuery 可以在这里提供帮助,那就太好了。

谢谢

4

2 回答 2

1

既然你说视觉顺序(而不是 DOM 顺序)就足够了,你可以这样做:

var first, firstTop, firstLeft;
$.each(yourArray, function(index, element) {
    var pos = $(element).offset();
    if (!first ||
        (pos.top < firstTop) ||
        (pos.top === firstTop && pos.left < firstLeft)
       ) {
        first = element;
        firstTop = pos.top;
        firstLeft = pos.left;
    }
});

也就是说,我不认为在 DOM 上进行递归下降并在您找到的第一个元素处停止确实与您认为的评论一样多,尤其是。因为您只对表单中的元素感兴趣。这些方面的东西:

function getFirstInDOM(list, root) {
    var node, found;
    for (node = root.firstChild; node; node = node.nextSibling) {
        // I assume you only care about elements, so skipping other nodes
        if (node.nodeType === 1) {
            if (list.indexOf(node) !== -1) {
                // Found
                return node;
            }
            found = getFirstInDOM(list, node);
            if (found) {
                return found;
            }
        }
    }
    return null;
}

实例| 直播源

于 2013-09-17T08:01:34.607 回答
1

找到了这个stackoverflow 答案,它指出当您使用 jQuery 添加两个元素时,它们将以文档顺序结束。

所以基本上我们可以只做 $().add(elementList).eq(0)。

于 2013-09-17T08:29:52.897 回答