una - selector por atributo jquery
Seleccionar elementos por atributo (13)
Tengo una colección de casillas con identificadores generados y algunos de ellos tienen un atributo adicional. ¿Es posible usar JQuery para verificar si un elemento tiene un atributo específico? Por ejemplo, ¿puedo verificar si el siguiente elemento tiene el atributo "myattr"? El valor del atributo puede variar.
<input type="checkbox" id="A" myattr="val_attr">A</input>
Por ejemplo, ¿cómo puedo obtener una colección de todas las casillas de verificación que tienen este atributo sin marcar una por una? es posible?
¿Quieres decir que puedes seleccionarlos? Si es así, entonces sí:
$(":checkbox[myattr]")
Además de seleccionar todos los elementos con un atributo $(''[someAttribute]'')
o $(''input[someAttribute]'')
, también puede usar una función para realizar verificaciones booleanas en un objeto, como en un controlador de clic:
if(! this.hasAttribute(''myattr'') ) { ...
En JavaScript, ...
null == undefined
... devuelve true
*. Es la diferencia entre ==
y ===
. Además, el nombre undefined
se puede definir (no es una palabra clave como null
), por lo que es mejor que compruebe de otra manera. La forma más confiable es probablemente comparar el valor de retorno del operador typeof
.
typeof o == "undefined"
Sin embargo, comparando a nulo debería funcionar en este caso.
* Suponiendo que undefined
es de hecho indefinido.
Esto funcionará:
$(''#A'')[0].hasAttribute(''myattr'');
JQuery devolverá el atributo como una cadena. Por lo tanto, puede verificar la longitud de esa cadena para determinar si está configurado:
if ($("input#A").attr("myattr").length == 0)
return null;
else
return $("input#A").attr("myattr");
Se lanzaron un par de ideas utilizando "typeof", jQuery ".is" y ".filter", así que pensé que publicaría una comparación rápida de ellas. El typeof parece ser la mejor opción para esto. Mientras que los otros funcionarán, parece haber una clara diferencia de rendimiento al invocar la biblioteca jq para este esfuerzo.
$("input[attr]").length
podría ser una mejor opción.
$("input#A").attr("myattr") == null
if (!$("#element").attr(''my_attr'')){
//return false
//attribute doesn''t exists
}
if ($(''#A'').attr(''myattr'')) {
// attribute exists
} else {
// attribute does not exist
}
EDITAR:
Lo anterior caerá en la rama else
cuando myattr
existe pero es una cadena vacía o "0". Si ese es un problema, deberías probar explícitamente en undefined
:
if ($(''#A'').attr(''myattr'') !== undefined) {
// attribute exists
} else {
// attribute does not exist
}