Kann ich mich vollständig darauf verlassen, dass sich die html()
Methode von jQuery identisch mit verhält innerHTML
? Gibt es einen Unterschied zwischen innerHTML
und der html()
Methode von jQuery ? Wenn beide Methoden dasselbe tun, kann ich die html()
Methode von jQuery anstelle von verwenden innerHTML
?
Mein Problem ist: Ich arbeite an bereits gestalteten Seiten, die Seiten enthalten Tabellen und in JavaScript wird die innerHTML
Eigenschaft verwendet, um sie dynamisch zu füllen.
Die Anwendung funktioniert einwandfrei unter Firefox, aber Internet Explorer löst einen Fehler aus : unknown runtime exception
. Ich habe die html()
Methode von jQuery verwendet und der IE -Fehler ist verschwunden. Ich bin mir jedoch nicht sicher, ob es für alle Browser funktioniert, und ich bin mir nicht sicher, ob alle innerHTML
Eigenschaften durch die html()
Methode von jQuery ersetzt werden sollen.
Danke vielmals.
Antworten:
Zur Beantwortung Ihrer Frage:
.html()
ruft nur.innerHTML
nach einigen Überprüfungen für nodeTypes und andere Dinge auf. Es wird auch eintry/catch
Block verwendet, in deminnerHTML
zuerst versucht wird, ihn zu verwenden. Wenn dies fehlschlägt, wird ordnungsgemäß auf jQuery's.empty()
+ zurückgegriffenappend()
quelle
innerHTML
direkte Verwendung in Betracht ziehen .Insbesondere in Bezug auf "Kann ich mich vollständig auf die jquery html () -Methode verlassen, die wie innerHTML funktioniert" lautet meine Antwort NEIN!
Führen Sie dies in Internet Explorer 7 oder 8 aus und Sie werden sehen.
jQuery erzeugt fehlerhaftes HTML, wenn HTML festgelegt wird, das ein <FORM> -Tag enthält, das in einem <P> -Tag verschachtelt ist, wobei der Anfang der Zeichenfolge eine neue Zeile ist!
Hier gibt es mehrere Testfälle, und die Kommentare beim Ausführen sollten selbsterklärend genug sein. Das ist ziemlich dunkel, aber nicht zu verstehen, was los ist, ist ein wenig beunruhigend. Ich werde einen Fehlerbericht einreichen.
quelle
Wenn Sie sich über die Funktionalität wundern, führt jQuery's
.html()
die gleiche beabsichtigte Funktionalität aus wie.innerHTML
, führt jedoch auch Überprüfungen auf browserübergreifende Kompatibilität durch.Aus diesem Grund können Sie immer jQuery's verwenden,
.html()
anstatt.innerHTML
wenn möglich.quelle
innerHTML ist kein Standard und funktioniert in einigen Browsern möglicherweise nicht. Ich habe html () in allen Browsern ohne Probleme verwendet.
quelle
"Diese Methode verwendet die innerHTML-Eigenschaft des Browsers." - jQuery API
http://api.jquery.com/html/
quelle
In Anbetracht der allgemeinen Unterstützung
.innerHTML
ist in diesen Tagen, die einzig wirksame Unterschied jetzt,.html()
wird Code in irgendwelchen ausführen<script>
Tags , wenn es irgendeine in den HTML - Code können Sie es geben..innerHTML
, Unter HTML5 , nicht.Aus den jQuery-Dokumenten :
Hinweis: Beide
.innerHTML
und.html()
können js auf andere Weise ausführen (zonerror
. B. das Attribut).quelle
script
Tags aus einem größeren HTML-Fragment. Vielleicht ist eine neue Frage / Antwort angebracht?Hier ist ein Code, mit dem Sie beginnen können. Sie können das Verhalten von .innerHTML ändern - Sie können sogar Ihren eigenen vollständigen .innerHTML-Shim erstellen. (PS: Die Neudefinition von .innerHTML funktioniert auch in Firefox, aber nicht in Chrome - sie arbeiten daran.)
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/
quelle