"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como determinar com segurança se um objeto JavaScript é um elemento DOM?

Como determinar com segurança se um objeto JavaScript é um elemento DOM?

Publicado em 2024-11-08
Navegar:914

How to Reliably Determine if a JavaScript Object is a DOM Element?

Como determinar o status do objeto DOM em JavaScript

Em JavaScript, diferenciar entre objetos DOM (Document Object Model) e objetos JavaScript regulares é crucial para determinadas operações. Embora a abordagem tradicional de verificação da propriedade tagName funcione na maioria dos casos, ela pode falhar em alguns navegadores que não impõem propriedades somente leitura.

Uma solução abrangente

Para resolver esse problema, considere a seguinte função:

function isElement(obj) {
  try {
    // W3 DOM2 (works for FF, Opera, and Chrome)
    return obj instanceof HTMLElement;
  } catch (e) {
    // Non-DOM2 browsers
    return (
      typeof obj === 'object' &&
      obj.nodeType === 1 &&
      typeof obj.style === 'object' &&
      typeof obj.ownerDocument === 'object'
    );
  }
}

Este código aproveita W3 DOM2 para navegadores suportados e verifica propriedades específicas em navegadores não DOM2.

Opções adicionais

Outra abordagem é use o seguinte código:

function isNode(o) {
  return typeof Node === 'object'
    ? o instanceof Node
    : o &&
        typeof o === 'object' &&
        typeof o.nodeType === 'number' &&
        typeof o.nodeName === 'string';
}

function isElement(o) {
  return typeof HTMLElement === 'object'
    ? o instanceof HTMLElement
    : o &&
        typeof o === 'object' &&
        o !== null &&
        o.nodeType === 1 &&
        typeof o.nodeName === 'string';
}

Este código distingue entre nós e elementos DOM, abordando possíveis diferenças nas implementações do navegador.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3