¿Hay una diferencia general entre removeAttr(x)
y attr(x, '')
en jQuery?removeAttr (x) vs. attr (x, '') en jQuery
Si es así, ¿cuándo usar cada una?
¿Hay una diferencia general entre removeAttr(x)
y attr(x, '')
en jQuery?removeAttr (x) vs. attr (x, '') en jQuery
Si es así, ¿cuándo usar cada una?
Son operaciones muy diferentes:
attr (x '') establece un atributo a una cadena vacía
removeAttr (x) elimina la propiedad en el objeto, si es posible, o lo elimina y lo restablece a su valor predeterminado si está definido por la DTD para esa clase de objeto.
.removeAttr(x);
es equivalente a .removeAttribute("x");
mientras que .attr(x, '')
simplemente establece .x
en una cadena vacía. Consulte el jQuery removeAttr
ref y el correspondiente mozilla removeAttribute
ref para obtener más información.
Algunos atributos son booleanos (si existen o no existen). Tome el atributo disabled
por ejemplo. Si existe, entonces es verdadero, no importa en qué se establece el valor. Entonces tendría que usar .removeAttr('disabled')
para habilitar nuevamente el elemento. Sin embargo, jQuery lo normaliza un poco, puede usar .attr('disabled', false);
Así que supongo que la respuesta es semántica.
Editar:
Esta respuesta acaba de conseguir algunos upvotes que alertó de que respondí esto hace varios años.
Use esto en lugar de propiedades -
.prop('disabled', true) // set as disabled
.prop('disabled', false) // set as enabled
.prop('disabled') // return boolean (is this disabled?)
NO uso removeProp ('discapacitados'), ya que esto eliminar la propiedad del objeto DOM (que no es lo que se viene a hacer).
Dado que la definición de removeAttr de la biblioteca jQuery (ver a continuación). Yo diría que sí.
removeAttr: function(name, fn) {
return this.each(function(){
jQuery.attr(this, name, "");
if (this.nodeType === 1) {
this.removeAttribute(name);
}
});
Fuente: Jquery 1.4.3 uncompressed version
Aunque es inherentemente subjetiva. Creo que usar removeAttr es un enfoque más autodocumentado. Sin embargo, pude ver a otras personas pensando lo contrario.
primera diferencia:
.removeAttr('name') // try to remove the attribute 'name' from the DOM
.attr('name', '') // set the attribute 'name' to empty string
La segunda diferencia, probablemente ocurrió sólo a mí, es .removeAttr()
trabajo correctamente en Firefox e IExplorer pero no muy bien en Chrome y no funcionan en absoluto en Safari.
Son diferentes, por ese mismo código - para los elementos, establece attr a '' * Y * (para los elementos) elimina el atributo del DOM. –
@pst - Punto tomado. Cambié "No" a "sí" – JohnFx
Por supuesto, es bastante tarde, pero compruebe la respuesta de @ john-strickler. Establecer un atributo como vacío lo deja en la etiqueta, por lo que está "presente". Esto es importante para los atributos que se utilizan como indicadores, como 'disabled 'y otros. – rewritten