2010-06-02 3 views
0

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

-> Puisque les balises div sont déplaçables, dans le DOM elles ne sont pas imbriquées l'une dans l'autre mais je pense qu'elles sont absolument positionnées. Donc, je pense qu'une approche de "test de hit" est la seule façon de déterminer le confinement, à moins qu'il y ait une routine "secrète" intégrée quelque part qui pourrait aider avec ceci.

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

Y at-il une raison critique pour laquelle les divs ne sont pas imbriqués? – Lazarus

+0

J'utilise JQuery div.draggable() pour que je puisse faire glisser le composant du circuit autour d'un espace de travail. Je ne crois pas que draggable() mette physiquement en place les balises div si j'en fais glisser une à l'intérieur d'une autre. –

Répondre

0

J'utiliserais aussi jQuery "droppable", en plus de "draggable".

De cette façon, vous pouvez savoir où vous laissez tomber quelque chose, et peut déplacer l'élément dans le DOM en conséquence ..

Jetez un oeil à jQuery draggable + droppable: how to snap dropped element to dropped-on element (explique comment supprimer l'élément tombé de sa place d'origine et l'ajouter à la cible de dépôt)

0
$.contains(DivContainer, LookForThisDiv); 

exemple:

jQuery.contains(document.documentElement, document.body); // true 

doc:

$.contains()

EDIT ok, son à peu près inutile si ces divs ne sont pas imbriqués (juste de lire que) de toute façon , c'est une belle fonction utilitaire.

Questions connexes