Pouvez-vous préciser un “data-target” pour "Bootstrap" qui se réfère à un frère ou une sœur de l'élément DOM sans l'aide d'un ID?
Je suis l'ajout dynamique de Rétractables éléments d'une page. Bootstrap utilise le "data-target" attribut pour spécifier l'élément de l'effondrement de la bascule s'applique.
De la documentation:
The data-target attribute accepts a css selector
Est-il un moyen d'écrire un sélecteur qui spécifie le prochain fils de l'élément parent? Tous les exemples de la documentation semblent utiliser les sélections par ID.
Spécifiquement le code HTML ressemble à:
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-target="#collapseOne">
Generated Title
</a>
</div>
<div id="collapseOne" class="accordion-body collapse in">
<div class="accordion-inner">
Generated Content... this is big and sometimes needs collapsing
</div>
</div>
</div>
Je voudrais écrire quelque chose comme (pseudo-code à l'aide de jquery syntaxe illégalement):
<a class="accordion-toggle" data-toggle="collapse" data-target="$(this).parent().next()">
Mais je commence à soupçonner cela peut ne pas être possible avec les sélecteurs CSS.
Actuellement comme une solution de contournement, je suis de la génération d'un nouveau code (un nombre d'incrémentation ajouté à une chaîne de caractères) quand je créer l'élément.
Est-il une plus belle approche à l'aide d'un sélecteur? Dois-je utiliser certains post-création javascript pour définir les données de l'attribut cible? Est la génération d'Id pour le contenu dynamique de l'approche standard?
- Pourriez-vous poster le code qui prend la
data-target
valeur de l'attribut et effectue de la recherche (serait de twitter bootsrap, probablement)? - ce que vous voulez est un sélecteur jQuery et comme il est dit dans la documentation, vous devez donner un sélecteur css. Vous devriez coller avec Id. C'est aussi le moyen le plus rapide pour JS pour trouver l'élément qui est pourquoi il fonctionne de cette façon 😉
- Une demande raisonnable, mais je ne sais pas par où commencer à chercher. Je suis en utilisant bootstrap 2.1.1 via
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.1.1/js/bootstrap.min.js"></script>
pour ce que ça vaut. - Bon à savoir, merci! Je suis nouveau à ce genre de choses et il se sentait étrange, d'où cette question. Si c'est le standard de l'approche que je vais arrêter de m'inquiéter.
- Indépendamment de ce que les docs pourrait-on dire, la mise en œuvre effective de ce plug-in utilise le
data-target
valeur comme un sélecteur jQuery.
Vous devez vous connecter pour publier un commentaire.
S'il est vrai que le sélecteur dans un
data-target
attribut est un sélecteur jQuery, les données-spécification de l'api pour ce plugin fournit pas les moyens de référencement de retour àthis
dans le cadre de l'exécution (voir lignes 147-153 dans bootstrap-collapse.js pour son utilisation).Cependant, je voudrais proposer une autre approche alternative, qui consiste à étendre les données de l'api avec votre propre basculer spécificateur. Appelons ça de la effondrement prochain.
JS (voir la mise à jour de la note)
HTML
JSFiddle (mise à jour)
Inconvénient ici est que c'est un peu étroitement associée démarche de, depuis la JS suppose une structure spécifique pour le balisage.
Note sur IE questions
Comme @slhck l'a souligné dans sa réponse, IE9 et en vertu apparemment échouer sur le premier clic lors de l'utilisation d'une version antérieure de ma réponse. La cause en est en réalité pas un IE problème du tout, mais plutôt un "Bootstrap" un. Si l'on invoque
.collapse('toggle')
sur une cible dontCarousel
objet est initialisé, letoggle()
méthode sera appelée deux fois - une fois lors de l'initialisation, puis à nouveau explicitement après l'initialisation. C'est certainement l'un Bootstrap bug et j'espère sera corrigé. La seule raison pour laquelle il n'a pas apparaissent comme un problème dans Chrome, FF, IE10, etc, c'est parce qu'ils soutiennent toutes les transitions CSS, et c'est pourquoi, lorsque le deuxième appel est effectué, il court-circuits, parce que le premier est toujours active. La mise à jour de la solution de contournement ci-dessus ne fait évite le double-appel de problème par la vérification de l'initialisation de la première et de la manipulation différemment.$target.data('collapse')
avec$target.data('bs.collapse')
pour le faire fonctionner. Très cool solution btw, merci 🙂@merv, la solution n'a pas fonctionné pour moi dans IE9 et ci-dessous, depuis la grille de l'état n'était pas disponible, sauf si vous avez cliqué à chaque fois. Il ne fonctionne bien sous Firefox et Chrome mais. Ainsi, après deux clics, tout devrait fonctionner.
Ce que j'ai fait a été de définir un
.collapse-next
classe pour le déclenchement des éléments, puis de la force de leurul
les frères et sœurs et avec l'effondrementtoggle
ensemble defalse
:C'est pour, en fait, pour faire basculer le menu état:
Il semble que l'utilisation de
data-
attributs est un peu plus moderne et plus propre approche, mais pour les vieux navigateurs de travail avec des classes et jQuery semble faire le travail aussi bien.toggle()
n'est pas appelé, mais plutôt que, lorsque le Collapse plugin est non initialiséetoggle()
est appelée double. De toute façon, j'ai mis à jour ma réponse dans le cas où vous souhaitez voir comment j'allais faire avec, accord avec les données des attributs de style.Oui, vous pouvez le faire facilement!
Il suffit d'ajouter le code suivant à votre scripts et profitez de:
Maintenant, à chaque où dans votre code, vous pouvez définir la cible de l'effondrement par un entièrement dynamique jQuery commande à l'intérieur de
data-mytarget
.Maintenant l'utiliser comme ça:
ou
ou
Démo:
JS:
CSS:
HTML:
Pas de javascript solution ou cela dépend de bootstrap js déjà en cours d'utilisation, tout en exploitant les DOM structure-
Voir le
data-target=""
...Un soupçon de moyen facile de réduire les encombrants solutions-
Cette CSS sélection de la structure permettra de sélectionner les DOM
.dropdown-toggle:hover + .more-menu
et là, nous pouvons appliquer notre CSS.Il y a plusieurs façons d'exploiter ce que nous avons.
:hover
ou:active
ou de nombreuses autres manières.Je pense que la meilleure approche serait de faire cette itération tous les
accordion-toggle
éléments et définir leursdata-target
attribut dynamiquement via jquery et après que la place le code de l'accordéon mentionné dans le bootstrap.Exemple :
Espère que cela aidera
TYPO3 FCE et Bootstrap Accordéon
Je vais avoir quelques problèmes avec cette question aussi, je suis à l'aide de TYPO3 pour un client qui veut être en mesure d'ajouter un nombre infini d'éléments à l'accordéon. J'ai donc créé un Flexible de l'Élément de Contenu et cartographié les éléments.
L'idée que les data-toggle="collapse-next" n'a pas fonctionné pour moi comme prévu car il n'a pas fermé les éléments ouverts. J'ai créé un nouveau javascript-la fonction de faire que vous trouverez le code ici. J'espère que quelqu'un trouve les trucs utiles.
Javascript
HTML
Ici est une approche qui évite de devoir les identificateurs uniques et évite un spécifique de la structure html.
Cette enferme chaque instance de l'effondrement de déclenchement et la cible dans une "section" de l'html. J'aime utiliser des sélecteurs de classe, en particulier pour les plusieurs instances. Dans ce cas, il évite d'avoir à créer artificiellement des Identifiants uniques.
Emprunt de @merv est une excellente réponse, j'ai nommé le data-toggle
collapse-section
similaire à soncollapse-next
, et ajouté un attribut de section.Au lieu de parent().next(), cette recherche d'une plus proche (le) nom de la section, puis vers le bas pour le nom de la cible. Ils peuvent être des frères et sœurs ou à tout autre niveau.
(J'ai une convention de nommage à l'aide de "id..." comme préfixe pour les noms de classe qui sont utilisés comme des sélecteurs jquery, pour éviter de mélanger avec le style.)
HTML
JS