我有一个 DOM 元素数组,但不按 DOM 顺序排列。如何获取第一个,即 DOM 中第一个出现的那个?
如果 jQuery 能在这里提供帮助,那就太好了。
谢谢
最佳答案
既然你已经说过视觉顺序(而不是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;
}
关于javascript - 获取列表中的第一个 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844223/