"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن تحديد ما إذا كان كائن JavaScript هو عنصر DOM بشكل موثوق؟

كيف يمكن تحديد ما إذا كان كائن JavaScript هو عنصر DOM بشكل موثوق؟

تم النشر بتاريخ 2024-11-08
تصفح:637

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

كيفية تحديد حالة كائن DOM في JavaScript

في JavaScript، يعد التمييز بين كائنات DOM (نموذج كائن المستند) وكائنات JavaScript العادية أمرًا بالغ الأهمية لعمليات معينة. على الرغم من أن الطريقة التقليدية للتحقق من خاصية tagName تعمل في معظم الحالات، إلا أنها قد تفشل في بعض المتصفحات التي لا تفرض خصائص للقراءة فقط.

حل شامل

لمعالجة هذه المشكلة، خذ بعين الاعتبار الوظيفة التالية:

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'
    );
  }
}
يعمل هذا الرمز على الاستفادة من W3 DOM2 للمتصفحات المدعومة ويتحقق من خصائص محددة في المتصفحات غير DOM2.

خيارات إضافية هناك طريقة أخرى تتمثل في استخدم الكود التالي:

function isNode(o) { نوع الإرجاع للعقدة === "كائن" ؟ س مثيل العقدة : س && نوع o === 'كائن' && نوع o.nodeType === 'رقم' && typeof o.nodeName === 'string'; } الوظيفة هي العنصر (س) { نوع الإرجاع HTMLElement === "كائن" ؟ o مثيل HTMLElement : س && نوع o === 'كائن' && س !== فارغة && o.nodeType === 1 && typeof o.nodeName === 'string';
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';
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3