¿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
truesi el atributo de datos no es una cadena vacía o un valor "falsey", por ejemplo,0ofalse.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') ....typeofcheque$('#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.undefinedmanera consistente. Sabemos por quétypeofse usa para verificarundefineden algunos casos, pero me resultaría confuso ver que se verifica contypeofun lugar y sin otro. Además, no es como usartypeofagrega 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-barentonces 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:
falseSolo 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
idde#dataTabletambién tiene undata-timeratributo, 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
$thisno se ha creado ningún objeto de datos,$.hasDataregresafalsey 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.lengthotro lugar. Además, no necesariamente podría decir con certeza sidataes una cadena, una matriz o un objeto, de los cuales este último puede contener o nolengthcomo una propiedad definida.Puede verificar por selección de atributo css con
fuente
Y que hay con:
fuente