Comment puis-je réécrire cette opération jQuery en JavaScript pur:
$("#my_id").before('<span class="asterisk">*</span>');
Edit: Je préfère la réponse de @Rob W et je pense que ce devrait être la réponse acceptée, pas celle-ci.
Cela fera ce que vous voulez, sans avoir besoin du support de bibliothèques gonflées comme jQuery.
var my_elem = document.getElementById('my_id');
var span = document.createElement('span');
span.innerHTML = '*';
span.className = 'asterisk';
my_elem.parentNode.insertBefore(span, my_elem);
Une méthode peu connue est le element.insertAdjacentHTML
. Avec cette méthode (prise en charge par tous les principaux navigateurs, y compris IE 4 ), vous pouvez prendre une chaîne HTML arbitraire et l'insérer n'importe où dans le document.
Pour illustrer la puissance de la méthode, utilisons notre exemple ...:
$("#my_id").before('<span class="asterisk">*</span>');
Devient
document.getElementById('my_id').insertAdjacentHTML('beforebegin',
'<span class="asterisk">*</span>');
insertAdjacentHTML
le premier argument de détermine la position d'insertion. Voici une comparaison avec jQuery:
$().before
- 'beforebegin'
$().prepend
- 'afterbegin'
$().append
- 'beforeend'
$().insertAfter
- 'afterend'
Comme vous pouvez le voir, c'est très simple à utiliser. En supposant que le sélecteur jQuery ne renvoie qu'un seul élément, vous pouvez généralement utiliser document.querySelector
, mais dans ce cas spécifique, utiliser document.getElementById
est plus efficace.
Vous pouvez créer votre propre fonction en javascript comme,
Code
var id = document.getElementById('my_id');
var s = document.createElement('span');
s.innerHTML = '*';
s.className = 'asterisk';
id.parentNode.insertBefore(s, id);
Vous pouvez créer une fonction avant comme,
before: function() {
return this.domManip( arguments, false, function( elem ) {
if ( this.parentNode ) {
this.parentNode.insertBefore( elem, this );
}
});
},
source depuis http://code.jquery.com/jquery-1.9.1.js