javascript - 获取列表中的第一个 DOM 元素

标签 javascript dom

我有一个 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;
}

Live Example | Live Source

关于javascript - 获取列表中的第一个 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844223/

相关文章:

javascript - jQuery 便利方法如何在我的 DOM 元素中结束?

javascript - setAttribute 使属性名称小写

javascript - 使用 Physi.js 进行玩家运动/物理

javascript - 如何在不显示超链接的情况下制作可点击的图像?

javascript - 如何使用 Chartjs 版本 2.X 设置自定义工具提示事件

javascript - 使用 mongoose 按 Id 删除对象

JavaScript DOM 问题。 (getElementsByClassName)

javascript - 大写 HTML <option> selected 属性

javascript - 使用 jQuery 追加 html 元素 - html、DOM 和 jQuery 追加之间的区别?

javascript - 从javascript修改div的数据 donut 属性