2010-06-01 5 views
3

Contexte: J'ai créé une application de conception de circuits en ligne où les balises div sont des conteneurs contenant des conteneurs div plus petits, etc. Question: Pour toute balise div particulière je dois rapidement identifier si elle contient d'autres balises div (qui peuvent à leur tour contenir d'autres balises div).JQuery/JavaScript div "approche" approche/algorithme?

J'ai recherché JQuery et je ne vois aucune routine intégrée pour cela. Est-ce que quelqu'un connaît un algorithme plus rapide que O (n^2)? Il me semble que je dois parcourir la liste des balises div dans une boucle externe (n) et avoir une boucle interne (un autre n) pour comparer toutes les autres balises div et faire un «test de confinement» (position, largeur, height), en construisant une liste d'étiquettes div contenues. C'est n-carré. Ensuite, je dois construire une liste de tous les tags div imbriqués en concaténant les listes contenues. Donc le total serait O (n^2) + n.

Il doit y avoir un meilleur moyen?

+0

Si vous êtes inquiet que sur la vitesse, que diriez-vous mettre en cache la quantité de div est que div particulier contient? – Matt

Répondre

1

Vous pouvez faire les vérifications suivantes

$('div_selector').has('div').length > 0 // it contains divs 

alternativement

$('div_selector').is(':has(div)') // returns true if it contains divs 

les contrôles ci-dessus travaillent pour le confinement réel (imbrication) dans le dom (pas pour le confinement visuel où les dimensions un div est contenu dans l'autre).

+0

(J'ai effectivement posé la mauvaise question, j'ai créé une nouvelle question concernant les balises div draggable.) –

1

Vous n'avez même pas besoin de jQuery. Vous pouvez juste faire ce test, où « div » est le conteneur:

if (div.getElementsByTagName('div').length > 0) { 
    // do something 
} 
+0

Merci. Je souhaite pouvoir donner "crédit" pour plus d'une réponse correcte dans ce système. (En fait, j'ai posé la mauvaise question, j'ai créé une nouvelle question concernant les balises div déplaçables.) –