saber - modificar atributo data jquery
¿Está bien agregar atributos Html personalizados? (11)
Agregar atributos arbitrarios significará que su HTML ya no es válido.
Sin embargo, si está utilizando XHTML, creo que puede agregar atributos que tengan un espacio de nombres XML diferente, lo que no causará problemas de validación.
No sé mucho acerca de esto, pero pensé que lo mencionaría como nadie más lo hizo. ¿Tal vez alguien más podría ampliar, o refutar, esto si tienen una mejor comprensión?
Tengo un sitio en el que estoy trabajando donde quiero marcar si se ha cambiado una fila de datos. Si algo ha cambiado en esa fila, lo marcaría con un atributo personalizado como ese.
<tr>
<td isDirty="true">
....row data
<td>
</tr>
Esto funciona muy bien con jQuery y no agrega mucho código a mi página.
Pero, ¿esta es realmente la forma correcta de hacer algo como esto y cuáles son los inconvenientes?
Creo que otra forma de hacer esto sería así, pero parece que mata.
<tr>
<td>
....row data
<input id="isDirty" type="hidden" value="true" />
<td>
</tr>
Creo que no hay una respuesta "Sí" o "No" a su pregunta. El uso de atributos personalizados te ayudará a tener un código más limpio y corto en muchas circunstancias. Su ejemplo es trivial y creo que no puede demostrar el poder y la flexibilidad de esta técnica. Específicamente, se trata de un atributo booleano, que muy probablemente tiene que ver con la apariencia. Este tipo de cosas se manejan mejor con una clase. Sin embargo, con atributos personalizados, puede agregar contexto a sus nodos. Puede usar este contexto para hacer algunos cálculos. Por ejemplo, agregue un atributo de precio o peso a los nodos de la lista. A continuación, utiliza estos campos para calcular la suma o el promedio. Estoy seguro de que hay muchos ejemplos mejores que estos.
Por otro lado, los atributos personalizados evitarán que html pase las pruebas de validación. Este es un problema importante y puede ser aún más importante en el futuro.
Cumplir con los estándares en aras de cumplir con los estándares es una mala razón para apegarse a los estándares.
Su página especifica el DTD, su servidor especifica el tipo MIME. Siempre que no envíe xhtml real, no hay razón para no utilizar los atributos de expansión de esta manera. Puede ser muy útil.
Ok, su página no se ''validará'' si necesita preocuparse por eso, entonces no lo haga.
Simplemente no se deje seducir por el método ''elem.isDestiant''s convenient'' de IEs para acceder a dichos valores. Siempre use elem.getAttribute (''isDirty'') para acceder al valor.
El uso de un atributo personalizado es útil desde varios puntos de vista, pero asegúrese de evitar la colisión del espacio de nombres utilizando un prefijo:
<td custom:isDirty="true">
De lo contrario, podría chocar con implementaciones futuras.
Como nota al margen, un elemento DOM puede tener propiedades personalizadas como cualquier otro objeto js, lo que significa que si crea nodos dinámicamente, puede agregar datos personalizados de cualquier tipo a su elemento, sin afectar la validación.
var element = document.createElement(''div''); element.myCustomObject = { foo: "bar", someFunction: function () { alert(''foobar''); }}; document.body.appendChild(element);
Por supuesto, lo anterior no tiene sentido para las personas que nunca hicieron scripts de clientes sin marcos como jQuery, prototipo, etc ... :)
Esto evitará que su página valide, creo, ya que está agregando atributos personalizados que los validadores no conocerán.
Es posible que pueda hacer esto con su propia DTD o esquema, pero eso es más trabajo.
Tu segundo ejemplo es la manera correcta de hacer esto, creo. La dirección correcta de todos modos.
Recomiendo cumplir con los estándares. La web ya está en mal estado;)
Técnicamente deberías estar usando el atributo de clase para esto. Las etiquetas pueden tener más de una clase, por lo que no deberían afectar a nada
<td class="isDirty otherclass">
isDirty es un ejemplo perfecto de cómo debe nombrarse una clase. Los nombres de clase deben ser semánticos, y no puedo pensar en una mejor forma de asignar una clase para describir de qué se trata ese elemento (que no sea usar el título si quieres compartir esa información con el usuario final).
No debe establecer sus propios atributos a menos que esté dispuesto a mantener su propia DTD.
¿Por qué no usas la capacidad de datos jQuery?
Su ejemplo será (no conozco la condición para seleccionar la td adecuada):
$("tr td").data("isDirty", true);
eche un vistazo a la documentación
HTML 5 admite atributos personalizados con el prefijo "data-". Entonces, usaría eso para ser compatible con versiones anteriores.
En cuanto a las versiones anteriores, no creo que valide, pero no me preocuparía por eso. Sin embargo, he escuchado que algunos navegadores pueden ignorar estas etiquetas. Por lo tanto, asegúrese de probarlo todo.
Hace años utilicé atributos personalizados, y funcionan. Hacer lo mismo siguiendo el estándar html 5, evitará problemas futuros, porque el problema pasado no existe. los problemas futuros pueden venir con dispositivos móviles y otros dispositivos diferentes a una computadora, pero, como serán parte del futuro cercano, cumpla con los atributos personalizados html 5 si desea usarlos. Mi nuevo caso es simple, lo que hago es usar etiquetas bien codificadas, con datos simples entre (datos variables) que obtengo a través de nodeValue con su elemento ... this.firstChild.nodeValue y la clave es hacer que el usado etiqueta mostrar ninguno por estilo ¿cómo obtienes esto? getelementbyID, por tagname, por nombre, por nombre de clase que elija. Ventajas No es necesario codificar entidades decodificadas, etc., no es necesario jquery