2017-10-25 3 views
1

Ich möchte alle td 's/-Zellen in einer Tabelle abbilden und nach ihren data Attributen suchen. Wenn das Attribut/sein zugewiesener Wert nicht leer ist, möchte ich console.log es.Prüfen, ob das Datenattribut nicht leer ist

Ich habe das für jetzt, aber es scheint nicht richtig zu funktionieren (Es sagt nur, dass alle td sind nicht leer). Ich bin mir auch nicht sicher, warum die this innerhalb der Kartenfunktion auf das window Objekt zeigt, aber nicht auf das genaue td. Irgendwelche Ideen was vermisse ich?

function checkTds() { 
    var $tab = $('table td'); 
    $.map($tab, function(){ 
     console.log($(this)); 
     if ($tab.attr("custom-data-attribute") !== "") { 
      console.log($(this)); 
     } 
    }); 
} 

checkTds(); 
+2

sollten Sie '$ tab.map()' verwenden, nicht '$ .map ($ tab)' – billyonecan

+1

Beide Möglichkeiten funktionieren. Da eine Knotenliste in jQuery iteriert werden kann, können Sie auch '$ tab.map()' verwenden. – Mouser

+0

können Sie, aber sie sind nicht das Gleiche. '.map()' ist speziell für die Arbeit mit jquery-Sammlungen – billyonecan

Antwort

2

Sie map verwenden, die auf die iteriert Liste eine eigene Variable zuweist:

Vom documentation

Rückruf Typ: Funktion (Object elementOfArray, Integer indexInArray) => Objekt Die Funktion zum Bearbeiten jedes Elements. Das erste Argument für die Funktion ist das Array-Element, das zweite Argument ist der Index im Array. Die Funktion kann einen beliebigen Wert zurückgeben. Ein zurückgegebenes Array wird in das resultierende Array abgeflacht. Innerhalb der Funktion bezieht sich dies auf das globale (Fenster-) Objekt.

Es ist auch Standard das Präfix verwenden data Ihre Gewohnheit zu machen Attribute: data-«yourname».

function checkTds() { 
 
    var $tab = $('table td'); 
 
    $.map($tab, function(element) { 
 

 
    //look at the element var here 
 
    //also check if the attribute exists! 
 
    if ($(element).attr("custom-data-attribute") && $(element).attr("custom-data-attribute") !== "") { 
 
     console.log($(element).attr("custom-data-attribute")); 
 
    } 
 
    }); 
 
} 
 

 
checkTds();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td custom-data-attribute="1"></td> 
 
    <td></td> 
 
    <td></td> 
 
    <td custom-data-attribute="4"></td> 
 
    </tr> 
 
</table>


Auf einer seitlichen Anmerkung: Ich persönlich würde davon abraten, Variablen mit dem Präfix $ verwenden, während jQuery verwenden. Es macht es einfacher, sie mit tatsächlichen jQuery-Funktionen zu verwechseln.

+0

Ich sehe ... Ok jetzt, wenn ich die Elementvariable verwende, druckt es alle tds, aber ich möchte, dass es nur diejenigen druckt, denen ein Wert zugewiesen ist (und zeige diesen Wert). So sieht mein td aus: – DevJoe

+0

Sehen Sie sich das Stapel-Snippet an, das ich hinzugefügt habe. – Mouser

+0

Großartig, danke !! – DevJoe

Verwandte Themen