<h1>Exemple : Extension des éléments du DOM</h1>
<div class="me">1</div>
<div class="me">2</div>
<div class="autre">3</div>
<div class="me">4</div>
<div class="me">5</div>
<span class="autre">6</span>
<div class="me">7</div>
<script>
  // Voici comment on utilise notre bibliothèque DOM
  document.addEventListener('DOMContentLoaded',  function () {
  var cssElements = dom(document.querySelectorAll('.me'));
var BGElement = dom(document.querySelector('span.autre'));
var zoomElement = dom(document.querySelector('div.autre'));

// tous les éléments de classe '.me' auront la couleur de texte blanche, 
// centrés et une fonte de 20px
cssElements.css({
  color: '#FFF',
  textAlign: 'center',
  fontSize: '20px'
});

// On change la couleur de fond du span 'autre' en bleu.
BGElement.changeBGColor('blue'); 

// on change le style du DIV '.autre' et on enchaine avec la méthode on pour définir
// une fonction qui sera appelée après un click. Cette méthode serait 'scale' avec
// un facteur egal à 2 (donc on double les dimensions du DIV par chaque click)
zoomElement.css({
  width: '200px',
  height: '20px',
  backgroundColor: 'orange',
  margin: '10px',
  color: '#FFF',
  textAlign: 'center',
  transition: 'all 0.25s ease-in-out 0s'
}).on('click', function(e){
  e.preventDefault();
  zoomElement.scale(2);
});
  });
</script>
html, body {
  height: 100%;
  min-height: 1005;
}

*, *:before, *:after {
  box-sizing: border-box;
}

.me {
  width: 200px;
  height: 20px;
  background: red;
  margin: 10px;
}

span.autre {
  margin-left: 10px;
  padding: 5px;
}
// Notre Bibliothèque DOM
;(function(){
  
  "use strict";

  /* DOM */
  // On définit notre wrapper, qu'on va appeler DOM. C'est notre Constructor.
  // Il reçoit el (un ou plusieur éléments DOM) comme paramètre
  // on définit la propriété elements qui génère un tableau contenant les éléments
  // du DOM
  function DOM(el) {
    this.elements = el.length ? Array.prototype.slice.call(el) : [el];
  }

  // On étend notre Wrapper pour contenir les méthodes suivantes:
  DOM.prototype = {
    // La méthode scale fait un zoom d'un certain élément en ayant un 
    //facteur de zoom comme paramètre
    scale: function (factor) {
      this.elements.map(function(element, index) {
        element.style.height = factor * parseInt(window.getComputedStyle(element).height, 10) + 'px';
        element.style.width = factor * parseInt(window.getComputedStyle(element).width, 10) + 'px';
      });
      return this; // Ceci est important pour l'enchainement des méthodes 
                  // (on veut par exemple El.method1(..).methode2(..) etc...)
    },
    
    // La méthode css définit le style d'un élément tout comme jQuery. 
    // Dans ce cas le paramètre style est un object de propriétés CSS
    css: function (styles) {
      this.elements.map(function(element, index) {
        for (var prop in styles) {
          if (styles.hasOwnProperty(prop)) {
            element.style[prop] = styles[prop];
          }
        }
      });
      return this;
    },
    
    // La méthode changeBGColor change la couleur de fond d'un élément du DOM.
    // paramètre: la nouvelle couleur
    changeBGColor: function (color) {
      this.elements.map(function(element, index) {
        element.style.backgroundColor = color;
      });
      return this;
    },

    // Cette Méthode est une simplificaion de addEventListener, 
    // qui a pour but d'ajouter des évènements aux éléments du DOM
    on: function (eventName, callback) {
      this.elements.map(function(element, index) {
        element.addEventListener(eventName, function (evt) {
          if (typeof callback === 'function') { callback(evt)}
        }, false);
      });
    }
  }
  /* EO:DOM */
  // On définit une instance de notre Wrapper DOM. Comme ça on pourrait 
  // utiliser notre petite Biliothèque d'une façon trés simple:
  // directement: dom(ELEMENT(S) DU DOM)
  window.dom = function (element) {
    return new DOM(element);
  }

  // on retourne notre wrapper au cas où l'utilisateur veut 
  // utiliser cette bibliothèque comme suit: var $D = new DOM(ELEMENT(S) DU DOM);
  return DOM;

}());

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.