Die Frage betrifft jQuery.

Was ist der beste Weg, um alle Klassen zu finden, die wie superclass-XXXXX aussehen, wobei XXXXX eine Zahl (eine beliebige Ganzzahl) auf der Seite ist, um jede solche Klasse in superclass-XXXXX-finished zu ändern?

Wenn sich beispielsweise die Klassen superclass-12345 und superclass-34 auf der Seite befinden, werden sie zu superclass-12345-finished und superclass-34-finished.

3
Haradzieniec 27 Nov. 2012 im 15:09

3 Antworten

Beste Antwort

Das funktioniert:

function f() {
    $("[class]").each(function() {
        this.className = this.className.replace(/(super-\d+)(-finished)?/, function(a, b, c) {
            if (c == "") {
                return a + "-finished";
            }
            return a;
        });
    });
}


f();
f();
f();

console.log($("[class]").map(function() {
    return this.className;
}));

Dies ersetzt jedes Vorkommen von super-<some digits> durch super-<same digits>-finished, selbst wenn Sie viele solcher Klassen für ein einzelnes Element haben.

Eingang:

<div class="super-11"></div>
<div class="super-not-11"></div>
<div class="yes-super-111"></div>

Ausgabe:

<div class="super-11-finished"></div>
<div class="super-not-11"></div>
<div class="yes-super-111-finished"></div>

http://jsfiddle.net/9RFn4/1

Bearbeiten: Aktualisiert, um Klassen herauszufiltern, die mit -finished enden.

2
Dogbert 27 Nov. 2012 im 11:47

Finden Sie alle von ihnen beginnend mit Superklasse wie folgt:

$('*[class^="superclass"]')

Ändern Sie dann alle Klassen, die mit der Oberklasse beginnen, in einen neuen Klassennamen:

$('*[class^="superclass"]').attr('class', 'newClass');
1
dsgriffin 27 Nov. 2012 im 11:12

Angenommen, Ihre Elemente haben nur eine einzige Klasse von superclass-*:

$('*[class^="superclass"]').prop('class', $(this).prop('class') + '-finished');
1
Zoltan Toth 27 Nov. 2012 im 11:17