¿Puedo confiar completamente en que el html()método de jQuery se comporta de manera idéntica innerHTML? ¿Hay alguna diferencia entre innerHTMLel 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 innerHTMLpropiedad 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 innerHTMLpropiedades con el html()método de jQuery .
Muchas gracias.

Respuestas:
Para responder tu pregunta:
.html()simplemente llamará.innerHTMLdespués de hacer algunas comprobaciones de nodeTypes y demás. También usa untry/catchbloque donde intenta usarinnerHTMLprimero y, si eso falla, recurrirá con gracia a jQuery's.empty()+append()fuente
innerHTMLdirectamente.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.innerHTMLcuando 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
.innerHTMLestos 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
.innerHTMLy.html()pueden ejecutar js de otras formas (por ejemplo, elonerroratributo).fuente
scriptetiquetas 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