এটি আমি বুঝতে পেরেছি:
var isHTMLElement = (function () {
if ("HTMLElement" in window) {
// Voilà. Quick and easy. And reliable.
return function (el) {return el instanceof HTMLElement;};
} else if ((document.createElement("a")).constructor) {
// We can access an element's constructor. So, this is not IE7
var ElementConstructors = {}, nodeName;
return function (el) {
return el && typeof el.nodeName === "string" &&
(el instanceof ((nodeName = el.nodeName.toLowerCase()) in ElementConstructors
? ElementConstructors[nodeName]
: (ElementConstructors[nodeName] = (document.createElement(nodeName)).constructor)))
}
} else {
// Not that reliable, but we don't seem to have another choice. Probably IE7
return function (el) {
return typeof el === "object" && el.nodeType === 1 && typeof el.nodeName === "string";
}
}
})();
কর্মক্ষমতা উন্নত করতে আমি একটি স্ব-আমন্ত্রণমূলক ফাংশন তৈরি করেছি যা কেবল একবার ব্রাউজারের ক্ষমতা পরীক্ষা করে এবং সেই অনুযায়ী উপযুক্ত ফাংশন বরাদ্দ করে।
প্রথম পরীক্ষাটি বেশিরভাগ আধুনিক ব্রাউজারে কাজ করা উচিত এবং ইতিমধ্যে এখানে আলোচনা করা হয়েছিল। উপাদানটির উদাহরণ হিসাবে এটি কেবল পরীক্ষা করেHTMLElement
। খুব সোজা।
দ্বিতীয়টি সবচেয়ে আকর্ষণীয় একটি। এটি এর মূল কার্যকারিতা:
return el instanceof (document.createElement(el.nodeName)).constructor
এটি পরীক্ষা করে যে এল এটি নির্মাণকারীর একটি উদাহরণ কিনা তা এটি পরীক্ষা করে। এটি করার জন্য, আমাদের একটি উপাদানটির চালকের অ্যাক্সেস প্রয়োজন। এজন্য আমরা যদি এটি-বিবৃতিতে পরীক্ষা করি। উদাহরণস্বরূপ IE7 এই ব্যর্থ হয়, কারণ (document.createElement("a")).constructor
হয় undefined
IE7 হবে।
এই পদ্ধতির সমস্যাটি document.createElement
হ'ল সত্যই দ্রুততম কাজ নয় এবং যদি আপনি এর সাথে অনেকগুলি উপাদান পরীক্ষা করে থাকেন তবে সহজেই আপনার অ্যাপ্লিকেশনটি ধীর করতে পারে। এটি সমাধান করার জন্য, আমি নির্মাতাদের ক্যাশে করার সিদ্ধান্ত নিয়েছি। বস্তুElementConstructors
মানটির সাথে সম্পর্কিত কনস্ট্রাক্টরগুলির সাথে কীটিরূপে নোডনাম রয়েছে। যদি কোনও কনস্ট্রাক্টর ইতিমধ্যে ক্যাশে থাকে তবে এটি এটি ক্যাশে থেকে ব্যবহার করে, অন্যথায় এটি এলিমেন্ট তৈরি করে, ভবিষ্যতে অ্যাক্সেসের জন্য তার নির্মাতাকে ক্যাশে করে এবং তারপরে এটির বিরুদ্ধে পরীক্ষা করে।
তৃতীয় পরীক্ষাটি হ'ল অপ্রীতিকর ফ্যালব্যাক। এটি পরীক্ষা করে এল একটি কিনা object
, এর জন্য একটি nodeType
সম্পত্তি সেট আছে 1
এবং একটি স্ট্রিং রয়েছে nodeName
। এটি অবশ্যই খুব নির্ভরযোগ্য নয়, তবুও বেশিরভাগ ব্যবহারকারীর এতদূর পিছিয়ে পড়া উচিত নয়।
এটি এখনও সবচেয়ে নির্ভরযোগ্য পদ্ধতির সাথে আমি উপস্থিত হয়েছি যখন এখনও পারফরম্যান্সকে যথাসম্ভব উচ্চতর রেখেছি।