¿Hay alguna manera de que pueda ejecutar lo siguiente:
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(', '));
¿Solo si hay un atributo llamado data-timer en el elemento con un id de #dataTable?
javascript
jquery
Angela
fuente
fuente
data-
atributo, pero habrá datos almacenados en jQuery y viceversa.Respuestas:
NOTA: esto solo se devuelve
true
si el atributo de datos no es una cadena vacía o un valor "falsey", por ejemplo,0
ofalse
.Si desea verificar la existencia del atributo de datos, incluso si está vacío, haga lo siguiente:
fuente
if ($("#dataTable[data-timer]").length) { ... }
.if ( $("#dataTable").is("[data-timer]") ) { ... }
. También es más útil si ya tiene una referencia a la tabla en otro objeto jQuery.fuente
if (typeof $('#dataTable').data('timer') !== 'undefined') ...
.typeof
cheque$('#dataTable').data('timer', Date.now())
. Parece que el OP quiere verificar que el atributo de datos real esté allí. La solución de @niiru (o la que ofreces en un comentario a esa solución) es mejor, en este caso.undefined
manera consistente. Sabemos por quétypeof
se usa para verificarundefined
en algunos casos, pero me resultaría confuso ver que se verifica contypeof
un lugar y sin otro. Además, no es como usartypeof
agrega código mucho más complicado . Puede ser más explícito, quizás redundante a lo sumo, pero difícilmente demasiado complicado. Sin embargo, veo su punto, pero diría que no usarlo sería una simplificación excesiva. ;]En el interés de proporcionar una respuesta diferente de las anteriores; podrías verificarlo
Object.hasOwnProperty(...)
así:alternativamente, si tiene múltiples elementos de datos sobre los que desea iterar, puede hacer una variablización del
.data()
objeto e iterar sobre él de esta manera:No digo que esta solución sea mejor que ninguna de las otras aquí, pero al menos es otro enfoque ...
fuente
data-foo-bar
entonces su cheque debe ser.data().hasOwnProperty("fooBar")
, no.data().hasOwnProperty("foo-bar")
O combinar con un poco de vainilla JS
fuente
data()
lugar deattr()
, no encontrará el atributo :(Puede usar el método hasData de jQuery.
http://api.jquery.com/jQuery.hasData/
Esto solo verificará la existencia de objetos de datos (o eventos) en su elemento, no podrá confirmar si tiene específicamente un objeto "temporizador".
fuente
Si desea distinguir entre valores vacíos y valores perdidos, puede usar jQuery para verificar de esta manera.
Entonces, de la pregunta original, harías esto.
fuente
Puede crear un complemento jQuery extremadamente simple para consultar un elemento para esto:
Entonces puedes simplemente usar
$("#dataTable").hasData('timer')
Gotchas:
false
Solo se devolverá si el valor no existe (esundefined
); si está configurado enfalse
/null
,hasData()
seguirá regresandotrue
.$.hasData()
que solo comprueba si se ha establecido algún dato en el elemento.fuente
He descubierto que esto funciona mejor con elementos de datos establecidos dinámicamente:
fuente
Todas las respuestas aquí usan la biblioteca jQuery.
Pero el Javascript de vainilla es muy sencillo.
Si desea ejecutar un script solo si el elemento con un
id
de#dataTable
también tiene undata-timer
atributo, los pasos son los siguientes:fuente
Esta es la solución más fácil en mi opinión es seleccionar todo el elemento que tiene cierto atributo de datos:
Aquí está la captura de pantalla de cómo funciona.
fuente
Respuesta incorrecta: vea EDITAR al final
Déjame construir sobre la respuesta de Alex.
Para evitar la creación de un objeto de datos si no existe, mejor lo hago:
Luego, donde
$this
no se ha creado ningún objeto de datos,$.hasData
regresafalse
y no se ejecutará$this.data(key)
.EDITAR: la función
$.hasData(element)
solo funciona si los datos se configuraron usando$.data(element, key, value)
, noelement.data(key, value)
. Debido a eso, mi respuesta no es correcta.fuente
Necesitaba un booleano simple para trabajar. Debido a que no está definido como no presente y no es falso, uso el
!!
para convertir a booleano:Una solución alternativa sería usar filtro:
fuente
fuente
.data('timer')
no está definido, obtendrá un TypeError: $ (...). Data (...) no está definido al verificardata.length
. Esta es probablemente la base de la pregunta del OP, es decir, asegurarse de que se pueda verificar con seguridad endata.length
otro lugar. Además, no necesariamente podría decir con certeza sidata
es una cadena, una matriz o un objeto, de los cuales este último puede contener o nolength
como una propiedad definida.Puede verificar por selección de atributo css con
fuente
Y que hay con:
fuente