¿Puedo confiar completamente en que el html()
método de jQuery se comporta de manera idéntica innerHTML
? ¿Hay alguna diferencia entre innerHTML
el html()
método y jQuery ? Si ambos métodos hacen lo mismo, ¿puedo usar el html()
método de jQuery en lugar de innerHTML
?
Mi problema es: estoy trabajando en páginas ya diseñadas, las páginas contienen tablas y en JavaScript la innerHTML
propiedad se usa para poblarlas dinámicamente.
La aplicación está funcionando bien en Firefox pero Internet Explorer dispara un error: unknown runtime exception
. Usé el html()
método de jQuery y el error de IE ha desaparecido. Pero no estoy seguro de que funcione para todos los navegadores y no estoy seguro de si reemplazar todas las innerHTML
propiedades con el html()
método de jQuery .
Muchas gracias.
Respuestas:
Para responder tu pregunta:
.html()
simplemente llamará.innerHTML
después de hacer algunas comprobaciones de nodeTypes y demás. También usa untry/catch
bloque donde intenta usarinnerHTML
primero y, si eso falla, recurrirá con gracia a jQuery's.empty()
+append()
fuente
innerHTML
directamente.Específicamente con respecto a "¿Puedo confiar completamente en el método jquery html () que funcionará como innerHTML", mi respuesta es NO!
Ejecute esto en Internet Explorer 7 u 8 y verá.
jQuery produce un HTML incorrecto al configurar HTML que contiene una etiqueta <FORM> anidada dentro de una etiqueta <P> donde el comienzo de la cadena es una nueva línea.
Hay varios casos de prueba aquí y los comentarios cuando se ejecutan deben ser lo suficientemente autoexplicativos. Esto es bastante oscuro, pero no entender lo que está pasando es un poco desconcertante. Voy a presentar un informe de error.
fuente
Si se está preguntando acerca de la funcionalidad, entonces jQuery
.html()
realiza la misma funcionalidad prevista que.innerHTML
, pero también realiza verificaciones de compatibilidad entre navegadores.Por esta razón, siempre puede usar jQuery en
.html()
lugar de.innerHTML
cuando sea posible.fuente
innerHTML no es estándar y puede que no funcione en algunos navegadores. He usado html () en todos los navegadores sin problema.
fuente
"Este método utiliza la propiedad innerHTML del navegador". - API de jQuery
http://api.jquery.com/html/
fuente
Teniendo en cuenta el apoyo general de
.innerHTML
estos días, la diferencia sólo es eficaz ahora es que.html()
se ejecute código en cualquier<script>
etiquetas si hay alguno en el html que le des..innerHTML
, en HTML5 , no lo hará.De los documentos de jQuery :
Nota: ambos
.innerHTML
y.html()
pueden ejecutar js de otras formas (por ejemplo, elonerror
atributo).fuente
script
etiquetas de un fragmento html más grande. ¿Quizás una nueva pregunta / respuesta esté en orden?Aquí hay un código para comenzar. Puede modificar el comportamiento de .innerHTML, incluso puede crear su propio shim .innerHTML completo. (PD: redefinir .innerHTML también funcionará en Firefox, pero no en Chrome, están trabajando en eso).
if (/(msie|trident)/i.test(navigator.userAgent)) { var innerhtml_get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").get var innerhtml_set = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").set Object.defineProperty(HTMLElement.prototype, "innerHTML", { get: function () {return innerhtml_get.call (this)}, set: function(new_html) { var childNodes = this.childNodes for (var curlen = childNodes.length, i = curlen; i > 0; i--) { this.removeChild (childNodes[0]) } innerhtml_set.call (this, new_html) } }) } var mydiv = document.createElement ('div') mydiv.innerHTML = "test" document.body.appendChild (mydiv) document.body.innerHTML = "" console.log (mydiv.innerHTML)
http://jsfiddle.net/DLLbc/9/
fuente