Pure méthode javascript pour envelopper le contenu dans un div
Je veux de l'emballage de tous les nœuds à l'intérieur du #slidesContainer
div avec JavaScript. Je sais que c'est facile à faire en jQuery, mais je suis intéressé de savoir comment le faire avec de la pure JS.
Voici le code:
<div id="slidesContainer">
<div class="slide">slide 1</div>
<div class="slide">slide 2</div>
<div class="slide">slide 3</div>
<div class="slide">slide 4</div>
</div>
Je veux enrouler la balise div avec une classe de "slide" collectivement dans une autre div avec id="slideInner"
.
Vous devez vous connecter pour publier un commentaire.
Si votre "slide"sont toujours dans slidesContainer que vous pourriez faire ce
Comme BosWorth99, j'aime aussi manipuler le dom éléments directement, ce qui permet de maintenir l'ensemble des attributs du nœud. Cependant, je voulais conserver la position de l'élément dans le dom et pas seulement ajouter de la fin en cas il y avait des frères et sœurs. Voici ce que j'ai fait.
function wrap(toWrap, wrapper) {
?Si vous patch document.getElementsByClassName pour IE, vous pouvez faire quelque chose comme:
Exemple: http://jsfiddle.net/GkEVm/2/
removeChild
puis unappendChild
. Il suffit de faire laappendChild
, et il va le retirer de son emplacement actuel. jsfiddle.net/GkEVm/3 ;o)if( nodesToWrap[0] )
.addedToDocument
variable est juste un drapeau qui indique si oui ou non le wrapper élément a été ajouté au DOM. La raison pour cela est que 1) la position d'insertion de l'emballage div dépend de la correspondance des nœuds et que 2) il n'y a peut-être pas de nœuds appariés, auquel cas l'emballage ne doit pas être ajouté au DOM, et 3) lorsqu'il y a plusieurs nœuds appariés l'emballage doit être ajouté au DOM une fois, avant le premier match. Le drapeau s'assure juste que ces conditions sont respectées.J'aime manipuler des éléments du dom directement createElement appendChild, removeChild, etc. par opposition à l'injection de chaînes comme
element.innerHTML
. Cette stratégie fonctionne, mais je pense que le navigateur natif méthodes sont plus directes. En outre, ils retourne une nouvelle valeur du nœud, vous permet d'économiser à partir d'un autre inutilegetElementById
appel.C'est vraiment simple, et aurait besoin d'être attaché à un certain type de l'événement pour en faire un usage quelconque.
jsFiddle
Peut-être aide votre compréhension de cette question à la vanille, avec js.
Une bonne astuce pour essayer de faire quelque chose que vous auriez normalement faire avec jQuery, sans jQuery, est de regarder la source de jQuery. Que font-ils? Eh bien, ils saisissent tous les enfants, de les ajouter à un nœud, puis ajouter le nœud à l'intérieur de la mère.
Voici une petite méthode pour faire précisément cela:
Et voici comment l'utiliser:
De ce que je comprends @Michal 's réponse est vulnérables aux attaques XXS (en utilisant innerHTML est une faille de sécurité) Voici un autre lien sur le présent.
Il y a beaucoup de façons de le faire, un que j'ai trouvé et aimé, c'est:
Cela fonctionne bien. Cependant, pour moi, parfois, je veux juste envelopper les parties d'un élément. J'ai donc modifié la fonction de cette:
J'espère que cette aide.
wrapInner plusieurs le contenu de la balise
Lien De Démo Jsbin