2016-11-10 2 views
1

Ich habe eine einfache Frage zu jQuery Array-Elemente ...eine Klasse zum ersten Element in Array hinzufügen

<div id="holder">  
    <div class="A">A</div> 
    <div class="A">A</div> 
    <div class="A">A</div> 
    <div class="B">B</div> 
    <div class="B">B</div> 
    <div class="B">B</div> 
    <div class="B">B</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
</div> 

und JS:

var klassenarray = $("#holder").find("[class]").map(function() { 
    return this.className; 
    }).get(); 
alert(klassenarray); 

Gibt mir:

A,A,A,B,B,B,B,C,C,C,C,C 

Nun muss ich eine Klasse namens first zu jedem Element mit dem gleichen Klassennamen hinzufügen. Wie folgt aus:

<div id="holder">  
    <div class="A first">A</div> 
    <div class="A">A</div> 
    <div class="A">A</div> 
    <div class="B first">B</div> 
    <div class="B">B</div> 
    <div class="B">B</div> 
    <div class="B">B</div> 
    <div class="C first">C</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
    <div class="C">C</div> 
</div> 
+1

Haben Sie etwas überhaupt versucht? –

+0

ich weiß nicht, wie man das erste Element der Klassennamen im Array "fängt" ... – Cycle99

Antwort

3

Um dies zu erreichen können Sie Ihr Array nehmen, um die einzigartigen Werte bekommen, dann Schleife durch und verwenden Sie die first() Methode nur die ersten Elemente mit dem angegebenen Klasse abzurufen. Versuchen Sie folgendes:

var klassenarray = $("#holder").find("[class]").map(function() { 
 
    return this.className; 
 
}).get(); 
 

 
$.unique(klassenarray).forEach(function(c) { 
 
    $('.' + c).first().addClass('first'); 
 
});
.first { color: #C00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="holder"> 
 
    <div class="A">A</div> 
 
    <div class="A">A</div> 
 
    <div class="A">A</div> 
 
    <div class="B">B</div> 
 
    <div class="B">B</div> 
 
    <div class="B">B</div> 
 
    <div class="B">B</div> 
 
    <div class="C">C</div> 
 
    <div class="C">C</div> 
 
    <div class="C">C</div> 
 
    <div class="C">C</div> 
 
    <div class="C">C</div> 
 
</div>

+0

danke Rory! funktioniert wie ein Charme – Cycle99

0

Eine Möglichkeit, dies zu tun:

$(".A:first").addClass('first') 
$(".B:first").addClass('first') 
$(".C:first").addClass('first') 

Working fiddle

+0

Sie scheinen den Punkt der Logik in der Frage, dh übersehen. Die Klassennamen sind nicht festgelegt. –

0
  var previousClazz=""; 
      $("#holder > div").each(function(index,item){ 

       if(previousClazz==$(item).attr("class")){ 

       }else{ 
        previousClazz=$(item).attr("class"); 
        $(item).attr("class",$(item).attr("class")+" first") 
       }; 
      }); 
+1

Willkommen bei Stack Overflow! Während dieses Code-Snippet die Frage lösen kann, hilft [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch nicht, Ihren Code mit erklärenden Kommentaren zu füllen, dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen! – kayess

Verwandte Themen