varios una tabla selectores seleccionar por obtener name elementos elemento datos con como cambiar atributos atributo agregar acceder jquery attributes

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'');


He creado el paquete npm con el comportamiento previsto como se describe anteriormente en cuestión.

Enlace a [npm] y [github]

El uso es muy simple. Por ejemplo:

<p id="test" class="test">something</p> $("#test").hasAttr("class")

devuelve verdadero

Funciona también con camelcase.


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");


Sé que ha pasado mucho tiempo desde que se hizo la pregunta, pero encontré que el cheque era más claro así:

if ($("#A").is(''[myattr]'')) { // attribute exists } else { // attribute does not exist }

(Como se encuentra en este sitio here )

La documentación sobre se puede encontrar here


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 }