我有一个DOM元素数组,而不是DOM顺序。我怎样才能得到第一个,即DOM中第一个出现的那个?
如果jQuery可以在这里提供帮助,那会很好。
由于
答案 0 :(得分:1)
由于您已经说过 visual 顺序(而不是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;
}
答案 1 :(得分:1)
发现这个stackoverflow answer表明当你用jQuery添加两个元素时,它们将以文档顺序结束。
所以基本上我们可以做$()。add(elementList).eq(0)。