2013-08-31 9 views
5

क्या कोई विशिष्ट तत्व के गहरे वंशज के स्तर को गिनने का कोई प्रभावी तरीका है?तत्व के डोम पदानुक्रम स्तर प्राप्त करें (वंश के स्तर की गणना करें)

उदाहरण:

<div id="wrapper"> 
    <ul> 
    <li class="first">first</li> 
    <li class="active">second</li> 
    <li class="last"><a>third</a></li> 
    </ul> 
</div> 

#wrapper4 का वंशज स्तर लौट जाना चाहिए, क्योंकि गहरे श्रृंखला इस प्रकार है: #wrapper > ul > li > a

li.first1 लौटना चाहिए क्योंकि यह कोई संतान नहीं है और li.lastli.last > a की वजह से 2 लौटना चाहिए।

मैं $('#wrapper').find(*) कर सकता हूं और सभी परिणामों के माध्यम से पुनरावृत्त कर सकता हूं, जो उन तत्वों के लिए काफी धीमा होना चाहिए जिनमें बहुत से वंशज हैं, खासकर body तत्व के लिए। http://jsbin.com/ixeWaja/1/edit

कोई भी विचार कैसे कुशलतापूर्वक इस हल करने के लिए:

यहाँ प्रयोग करने के लिए एक शुरुआत है?

+0

_ _ _efficint_ परिभाषित "वहाँ एक कारगर तरीका है", लेकिन मूल रूप से, ** नहीं। ** – gdoron

+3

तो '#wrapper> ul> li> A' है 3 (यानी' # रैपर 'में वंश के 3 स्तर होते हैं), तो' li.first' होना चाहिए और 'li.last' 1 होना चाहिए? – BoltClock

+0

धन्यवाद, इसे सही किया गया। – Alp

उत्तर

6

यदि आपको अंततः गहराई की आवश्यकता होती है तो क्षमता शायद आपकी सबसे बड़ी चिंता नहीं होगी, लेकिन यह करने के लिए यह एक सुंदर संक्षिप्त और कुशल तरीका है।

var el = $("#wrapper"); 
var i = 0; 

while ((el = el.children()).length) { 
    i++; 
} 

http://jsbin.com/ixeWaja/4/

+2

ओएमजी यह सुंदर है, यहां मैं इस बड़े रिकर्सिव इटरेटर को दूर करना शुरू कर रहा था। लेकिन निश्चित रूप से jQuery jQuery ऑब्जेक्ट में निहित सभी तत्वों के '.children() 'को विलय करता है ताकि आपको इस तरह की गहरी संभावना मिल जाएगी। – funkwurm

+0

ग्रेट समाधान। – Alp

संबंधित मुद्दे