Gibt es eine Möglichkeit, wie ich Folgendes ausführen kann:
var data = $("#dataTable").data('timer');
var diffs = [];
for(var i = 0; i + 1 < data.length; i++) {
diffs[i] = data[i + 1] - data[i];
}
alert(diffs.join(', '));
Nur wenn das Element ein Attribut namens data-timer mit der ID #dataTable enthält?
javascript
jquery
Angela
quelle
quelle
data-
Attribut gespeichert ist , sondern Daten in jQuery und umgekehrt.Antworten:
HINWEIS: Dies wird nur zurückgegeben,
true
wenn das Datenattribut keine leere Zeichenfolge oder ein "Falsey" -Wert ist, z . B.0
oderfalse
.Wenn Sie überprüfen möchten, ob das Datenattribut vorhanden ist, auch wenn es leer ist, gehen Sie folgendermaßen vor:
quelle
if ($("#dataTable[data-timer]").length) { ... }
.if ( $("#dataTable").is("[data-timer]") ) { ... }
. Dies ist auch nützlicher, wenn Sie bereits einen Verweis auf die Tabelle in einem anderen jQuery-Objekt haben.quelle
if (typeof $('#dataTable').data('timer') !== 'undefined') ...
.typeof
Scheck hinzufügen$('#dataTable').data('timer', Date.now())
. Es scheint, dass das OP überprüfen möchte, ob das tatsächliche Datenattribut vorhanden ist. Die Lösung von @ niiru (oder die, die Sie in einem Kommentar zu dieser Lösung anbieten) ist in diesem Fall besser.undefined
konsistente Weise zu suchen . Wir wissen , warumtypeof
verwendet wird , um zu prüfenundefined
in einigen Fällen, aber ich würde , um es zu sehen verwirrend geprüft werden mittypeof
an einem Ort und ohne in einem anderen. Außerdem ist es nicht wie mittypeof
einem fügt viel mehr kompliziert Code. Es kann expliziter sein, vielleicht höchstens überflüssig, aber kaum überkompliziert. Ich verstehe Ihren Standpunkt zwar, aber ich würde sagen, dass es zu einfach wäre, ihn nicht zu verwenden. ;]Im Interesse einer anderen Antwort als oben; Sie könnten es so überprüfen
Object.hasOwnProperty(...)
:Wenn Sie mehrere Datenelemente haben, über die Sie iterieren möchten, können Sie das
.data()
Objekt alternativ variieren und wie folgt durchlaufen :Nicht zu sagen, dass diese Lösung besser ist als die anderen hier, aber zumindest ist es ein anderer Ansatz ...
quelle
data-foo-bar
Ihre Prüfung.data().hasOwnProperty("fooBar")
nicht.data().hasOwnProperty("foo-bar")
Oder kombinieren Sie mit etwas Vanille JS
quelle
Sie können die hasData-Methode von jQuery verwenden.
http://api.jquery.com/jQuery.hasData/
Dies überprüft nur das Vorhandensein von Datenobjekten (oder Ereignissen) in Ihrem Element. Es kann nicht bestätigt werden, ob es speziell ein "Timer" -Objekt enthält.
quelle
Wenn Sie zwischen leeren und fehlenden Werten unterscheiden möchten, können Sie dies mit jQuery überprüfen.
Von der ursprünglichen Frage würden Sie dies also tun.
quelle
Sie können ein extrem einfaches jQuery-Plugin erstellen, um ein Element dafür abzufragen:
Dann können Sie einfach verwenden
$("#dataTable").hasData('timer')
Fallstricke:
false
nur zurückgegeben, wenn der Wert nicht existiert (istundefined
); Wenn es auffalse
/ gesetzt ist, wirdnull
eshasData()
immer noch zurückkehrentrue
.$.hasData()
dem nur überprüft , ob alle Daten auf dem Element gesetzt.quelle
Ich habe festgestellt, dass dies mit dynamisch gesetzten Datenelementen besser funktioniert:
quelle
Alle Antworten hier verwenden die jQuery-Bibliothek.
Aber das Vanille-Javascript ist sehr einfach.
Wenn Sie ein Skript nur ausführen möchten, wenn das Element mit einem
id
von#dataTable
auch eindata-timer
Attribut hat, lauten die Schritte wie folgt:quelle
Dies ist meiner Meinung nach die einfachste Lösung, um alle Elemente auszuwählen, die bestimmte Datenattribute haben:
Hier ist der Screenshot, wie es funktioniert.
quelle
Falsche Antwort - siehe BEARBEITEN am Ende
Lassen Sie mich auf Alex 'Antwort aufbauen.
Um die Erstellung eines Datenobjekts zu verhindern, wenn es nicht vorhanden ist, sollte ich Folgendes tun:
Wenn dann
$this
kein Datenobjekt erstellt wurde, wird$.hasData
zurückgegebenfalse
und es wird nicht ausgeführt$this.data(key)
.BEARBEITEN: Funktion
$.hasData(element)
funktioniert nur, wenn die Daten mit eingestellt wurden$.data(element, key, value)
, nichtelement.data(key, value)
. Aus diesem Grund ist meine Antwort nicht korrekt.quelle
Ich brauchte einen einfachen Booleschen Wert, um damit zu arbeiten. Da es nicht definiert ist, nicht vorhanden und nicht falsch zu sein, verwende ich das
!!
, um es in einen Booleschen Wert umzuwandeln:Eine alternative Lösung wäre die Verwendung von Filter:
quelle
quelle
.data('timer')
undefiniert ist, erhalten Sie einen TypeError: $ (...). Data (...) ist beim Überprüfen undefiniertdata.length
. Dies ist höchstwahrscheinlich die Grundlage der Frage des OP, dh sicherzustellen, dass man sicherdata.length
anderswo prüfen kann . Außerdem könnten Sie nicht unbedingt sicher sagen, obdata
es sich um eine Zeichenfolge, ein Array oder ein Objekt handelt, dessen letzterelength
Eigenschaft als definierte Eigenschaft enthalten sein kann oder nicht .Sie können durch CSS-Attributauswahl mit überprüfen
quelle
Und was ist mit:
quelle