"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo determinar de forma fiable si un objeto JavaScript es un elemento DOM?

¿Cómo determinar de forma fiable si un objeto JavaScript es un elemento DOM?

Publicado el 2024-11-08
Navegar:740

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

Cómo determinar el estado del objeto DOM en JavaScript

En JavaScript, diferenciar entre objetos DOM (modelo de objetos de documento) y objetos JavaScript normales es crucial para determinadas operaciones. Si bien el enfoque tradicional de verificar la propiedad tagName funciona en la mayoría de los casos, puede fallar en algunos navegadores que no imponen propiedades de solo lectura.

Una solución integral

Para solucionar este problema, considere la siguiente función:

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 aprovecha W3 DOM2 para navegadores compatibles y comprueba propiedades específicas en navegadores que no son DOM2.

Opciones adicionales

Otro enfoque es use el siguiente 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 nodos y elementos DOM, abordando posibles diferencias en las implementaciones del navegador.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3