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 - onchange后在javascript代码中获取文本框值

javascript - 查询 |如何从选择的html元素中获取选定的项目

javascript - Document.cookie 的 setter 在 Web 浏览器中是异步的吗?

javascript - 使用 querySelector() 按类获取 div 并排除其他类

javascript - ActiveMQ-Stomp 消费者收不到消息

javascript - 来自动态生成的控件的 Jquery 事件

javascript - 在联系表单上提交时不要输入 "Leave this page"

javascript - 带有 X-Editable 的 Rails 4 不起作用

javascript - 如何在 IE 中创建一个新的 HTMLDocument?

python - 我只想要 XML 元素的直接子元素,而不是所有后代