আমাকে কেবল 'আমার' ভাগ করে নিতে হয়েছিল।
যদিও ধারণাগতভাবে আসফের উত্তরের সমান (একই ক্রস-ব্রাউজারের সামঞ্জস্যতা এমনকি আইআই)) থেকে উপকার পাওয়া যায়, এটি অনেক ছোট এবং আকারে যখন প্রিমিয়ামে থাকে এবং / অথবা যখন এত বেশি প্রয়োজন হয় না তখন এটি কার্যকর হয়।
function childOf(/*child node*/c, /*parent node*/p){ //returns boolean
while((c=c.parentNode)&&c!==p);
return !!c;
}
.. অথবা ওয়ান-লাইনার হিসাবে ( মাত্র 64 টি অক্ষর !):
function childOf(c,p){while((c=c.parentNode)&&c!==p);return !!c}
এবং jsfiddle এখানে ।
ব্যবহার:
childOf(child, parent)
বুলিয়ান ফেরতtrue
| false
।
ব্যাখ্যা:
while
যতক্ষণ শর্তটি মূল্যায়ন করে ততক্ষণ মূল্যায়ন করেtrue
। (এবং) অপারেটর আয় এই বুলিয়ান সত্য / মিথ্যা পর বাম দিকে এবং ডান দিকে মূল্যায়নের, কিন্তু শুধুমাত্র যদি বাম দিকে সত্য ছিল ( )
&&
left-hand && right-hand
।
(বাম দিকে &&
) হল: (c=c.parentNode)
।
এই প্রথম ধার্য হবে parentNode
এর c
থেকে c
এবং তারপর অপারেটর ফলে মূল্যায়ন করবে c
একটি বুলিয়ান হিসাবে।
যেহেতু কোনও পিতামাতা না থাকলে এবং রূপান্তরিত হয় তা parentNode
ফেরত দেয়null
null
false
না থাকাকালীন যখন লুপটি সঠিকভাবে বন্ধ হয়ে যায়।
(ডান দিকে &&
) হল: c!==p
। তুলনা অপারেটর হল ' না ঠিক করার সমান'। তাই আপনি যদি সন্তানের পিতা বা মাতা পিতা বা মাতা (আপনার নির্দিষ্ট করা) এটিকে মূল্যায়ণ নয় , কিন্তু যদি সন্তানের পিতা বা মাতা হয় পিতা বা মাতা তারপর এটি মূল্যায়ণ ।
সুতরাং যদি মিথ্যা হিসাবে মূল্যায়ন করা হয়, তবে অপারেটরটি সময়-শর্ত হিসাবে ফিরে আসে এবং যখন লুপটি থামায়। (নোট করুন কিছুক্ষণ দেহের প্রয়োজন নেই এবং সমাপনী সেমিকোলন প্রয়োজন)
!==
true
false
c!==p
&&
false
;
সুতরাং যখন লুপটি শেষ c
হয় তখন হয় কোনও নোড (না null
) যখন এটি পিতামাতাকে খুঁজে পায় বা এটি হয় null
(যখন লুপটি কোনও মিল খুঁজে না পেয়ে শেষ পর্যন্ত চলে যায়)।
সুতরাং আমরা কেবল return
যে FACT (নোড পরিবর্তে, বুলিয়ান মান হিসাবে রূপান্তরিত) ঃ return !!c;
: !
( NOT
অপারেটর) একটি বুলিয়ান মান (inverts true
হয়ে false
এবং ভাইস বিপরীতভাবে)। এটির মানটি উল্টাতে পারে তার আগে (নোড বা নাল) একটি বুলিয়ানে
!c
রূপান্তর করে c
। সুতরাং একটি দ্বিতীয় জোড়ার !
( !!c
) এই মিথ্যা পরিবর্তন করে ফিরে সত্যতে (যার কারণে একটি ডবল !!
প্রায়ই করতে 'বুলিয়ান রূপান্তর কিছু' ব্যবহার করা হয়)।
অতিরিক্ত:
ফাংশনের শরীর / পে লোড এত ছোট যে, যদি তার উপর নির্ভর করে (যেমন যখন এটি প্রায়ই ব্যবহার করা হয় না এবং কোডে মাত্র একবার দেখা যায়), এক পারে ফাংশন (মোড়ানো) এমনকি বাদ এবং মাত্র যখন লুপ ব্যবহার করুন:
var a=document.getElementById('child'),
b=document.getElementById('parent'),
c;
c=a; while((c=c.parentNode)&&c!==b); //c=!!c;
if(!!c){ //`if(c)` if `c=!!c;` was used after while-loop above
//do stuff
}
পরিবর্তে:
var a=document.getElementById('child'),
b=document.getElementById('parent'),
c;
function childOf(c,p){while((c=c.parentNode)&&c!==p);return !!c}
c=childOf(a, b);
if(c){
//do stuff
}