2010-05-23 6 views
2

Je voudrais utiliser jQuery pour faire ceci:jQuery: ajouter des numéros dans une liste ordonnée

<ol> 
<li>item a</li> 
<li>item b</li> 
</ol> 
<ol> 
<li>item c</li> 
<li>item d</li> 
<li>item e</li> 
</ol> 

... devenir ceci:

<ol> 
<li><span>1</span> item a</li> 
<li><span>2</span> item b</li> 
</ol> 
<ol> 
<li><span>1</span> item c</li> 
<li><span>2</span> item d</li> 
<li><span>3</span> item e</li> 
</ol> 

(This answer ne fonctionne pas quand il y a plusieurs ol s sur la page, le nombre serait incrémenté sur les ol s au lieu de 1 à partir de 1 pour chaque individu ol.)

Répondre

4

Ou comme ceci:

$('ol > li').each(function() { 
    $(this).prepend("<span>" + ($(this).index() +1) + "</span>"); 
}); 

Référence: prepend(),

2

Pro bablement pas la meilleure solution, mais il fait le travail:

​$('ol').each(function() { 
    $(this).children('li').each(function(i) { 
     $(this).prepend(' ' + (i+1) + ' '); 
    }); 
});​​ 
+0

Où sont les '' balises? OP peut avoir l'intention de les utiliser pour le style. – user113716

3

Vous pouvez faire quelque chose comme ça (depuis jQuery 1.4+, .prepend() prend une fonction):

​$("ol").each(function() { 
    $("li", this).prepend(​​​​​​​​function(i) { 
     return $("<span />", {text: i+ 1 }); 
    }); 
});​ 

You can see a working demo here

Ou, encore plus court, mais moins efficace:

$("ol li").prepend(function() { 
    return $("<span />", {text: $(this).index() +1 }); 
});​ 

You can see that demo here

+0

+1, mais vous devez concaténer dans un espace. '(i + 1) + ''' et '($ (this) .index() +1) + ''' – user113716

+0

@patrick - Je suis d'accord avec l'exemple (en fait l'espace est après le '' dedans) ... mais je le ferais en CSS Si j'étais l'OP, plus cohérent et mieux que de le faire en javascript imo. –

+0

Bons points. J'ai mal positionné l'espace, et je suis d'accord que CSS serait un meilleur moyen d'espacer les nombres ajoutés. – user113716

0
$("ol").each 
(
    function() 
    { 
     $("li", this).each 
     (
      function (i) 
      { 
       $(this).prepend("<span>" + (i+1) + "</span>"); 
      } 
     ); 
    } 
); 
Questions connexes