2016-12-02 5 views
-5

Ich habe eine Liste, die ein bisschen wie folgt aussieht:den ersten Buchstaben und legte sie über den Inhalt Gruppe

<ul class="mylist"> 
    <li>AAA</li> 
    <li>AAA</li> 
    <li>AAA</li> 
    <li>BBB</li> 
    <li>BBB</li> 
    <li>CCC</li> 
</ul> 

Ich möchte nun den ersten Buchstaben des Inhalts über den Inhalt Gruppe hinzuzufügen. Hier

ist ein Beispiel dafür, wie das Ergebnis aussehen würde:

<ul class="mylist"> 
    <li><strong>A</strong></li> 
    <li>AAA</li> 
    <li>AAA</li> 
    <li>AAA</li> 
    <li><strong>B</strong></li> 
    <li>BBB</li> 
    <li>BBB</li> 
    <li><strong>C</strong></li> 
    <li>CCC</li> 
</ul> 

Wie kann ich das tun?

+0

nutzen Sie bitte Google "wie li in ul jquery iterieren", dieses Sie hier: https://api.jquery.com/each/ dann müssen Sie eine Implementierung machen oder versuche es und poste es hier. Das ist mehr als machbar, Ihre Frage sollte am Ende lauten "Das funktioniert nicht" oder "Wie kann ich diesen Algorithmus schneller machen?" – abc123

+0

Sie suchen dort nach einem JS/JQ-Wrapper. Sie könnten tun, was @ abc123 vorgeschlagen und online aussehen, Tonnen von Ressourcen für dieses genaue Problem. Sobald Sie das Konzept verstanden haben, können Sie den Code in einem Plugin oder einer Funktion ablegen und ihn einfach auf den Tabellen aufrufen, die Sie umschließen möchten. Davon abgesehen, wenn Sie einige Ansätze ausprobiert haben und es nicht knacken können, können wir alle bei der Diagnose dieses Problems mehr nützlich sein. – Turk

Antwort

1

Ziemlich einfach mit jQuery - siehe die Code-Kommentare für die Erklärung.

// shorthand for on document load 
$(function() { 
    // a variable to store our current first letter 
    var currentFirstLetter; 

    // for every child of mylist 
    $('.mylist').children().each(function() { 

    // take the first character of its content 
    var thisLetter = $(this)[0].innerHTML.substr(0,1).toLowerCase(); 

    // if its different to our current first letter then add the required element 
    // and update our current first letter 
    if (thisLetter !== currentFirstLetter) { 
     $(this).before("<li><strong>" + thisLetter.toUpperCase() + "</strong></li>"); 
     currentFirstLetter = thisLetter; 
    } 
    }); 
}); 

jsFiddle

+0

Danke, das funktioniert gut, aber es ist case insensitive. Wenn Sie also "

  • aAA
  • " hinzufügen, wird ein weiteres ** a ** hinzugefügt. – Reza

    +0

    Sie können die Strings einfach mit toLowerCase und toUpperCase Methoden bearbeiten –

    +0

    Oh wow ... das ist einfach perfekt! Vielen Dank! Du hast meinen Tag gerettet! :) – Reza

    Verwandte Themen