2015-12-31 10 views
7

Ich versuche, einige Informationen zu reorganisieren, die durch serverseitigen Code erstellt werden. Der Server ist für Speicher reserviert, und alle Sortierung und Anzeige muss clientseitig mit javascript/jquery abgewickelt werden. Die html ist nach dem Vorbild der ...Sortierelemente basierend auf CSS-Klasse und Text funktioniert nicht

<div> 
    <a href="https://en.wikipedia.org" class="AccessSitesLinks true 1">Wikipedia Home</a> 
    <a href="https://en.wikipedia.org/wiki/Gold" class="AccessSitesLinks false 1">Wikipedia Gold</a> 
    <a href="https://google.com" class="AccessSitesLinks true 2">Google Home</a> 
    <a href="https://mail.google.com/" class="AccessSitesLinks false 2">Google Mail</a> 
    <a href="https://en.wikipedia.org/wiki/Mushroom" class="AccessSitesLinks false 1">Wikipedia Mushrooms</a> 
    <a href="https://facebook.com" class="AccessSitesLinks true 3">FaceBook Home</a> 
    <a href="https://facebook.org/about" class="AccessSitesLinks false 3">FaceBook About</a> 
</div> 

Hier meine Geige im Gang ist https://jsfiddle.net/ydc6ywuz/1/ Das übergeordnete Ziel ist AccessSitesLinks true zu sortieren die Wurzel-Sites zu sein. Das bedeutet, dass eine CSS-Klasse, die false ist, an die Root-Site basierend auf der Nummer nach false angefügt werden sollte. Das beste Beispiel ist Wikipedia Home ist true und 1, Websites wie Pilze und Gold wäre false und 1.

Dies ist nicht, wo mein Problem ist. Wenn ich diesen Javascript-Code ausführe. Die Sortierung funktioniert perfekt. aber die href-Werte bleiben gleich. Obwohl sie im Abschnitt "Console.log" korrekt sind.

function setFields() { 
    var sortSite = $('.AccessSitesLinks.true'); 
    var arr = sortSite.map(function(_, o) { 
     return { 
      t: $(o).text(), 
      h: $(o).attr('href'), 
      c: $(o).attr('class') 
     }; 
     }).get(); 
     arr.sort(function(o1, o2) { 
      return o1.t > o2.t ? 1 : o1.t <o2.t ? -1: 0; 
     }); 

     sortSite.each(function(i, o) { 
     console.log(i); 
     $(o).text(arr[i].t); 
     $(o).attr(arr[i].h); 
     $(o).attr(arr[i].c); 
     console.log(arr[i].h); 
     console.log(arr[i].c); 
     }); 

Edit: Ich habe versucht, zu tun, aber diese Uncaught Reference hat nicht funktioniert: Seite ungültig lef-Hand in Zuordnung

+1

Es ist möglich, Sie können den HTML in irgendeiner Weise ändern? Dies wäre viel einfacher, wenn Sie anstelle von Klassen 'data-*' Attribute zum Organisieren der Elemente verwenden. –

+1

Wenn Sie * die Attribute in der '.each()' - Schleife * setzen, müssen Sie sowohl den Attributnamen als auch den Wert angeben. – Pointy

+0

Was passiert, wenn Sie console.log (o)? –

Antwort

7

Diese Linien sind das Problem:

$(o).attr(arr[i].h); 
    $(o).attr(arr[i].c); 

Sie bieten müssen die Attributnamen:

$(o).attr("href", arr[i].h); 
    $(o).attr("class", arr[i].c); 
+0

Das Problem ist jetzt Wikipedia Gold bleibt in der gleiche Stelle, aber das ist, weil ich die Append-Logik nicht hinzugefügt habe. Vielen Dank! –

+1

+50 in einer Minute! LoL –

+3

@PraveenKumar es ist immer super einfach auch so :) – Pointy

Verwandte Themen