В jQuery HTML () - все и innerHTML будет
могу ли я полностью полагаться на jQuery html() метод ведет себя идентично innerHTML? Есть ли разница между innerHTML и jQuery html() способ? Если эти методы оба делают то же самое, могу ли я использовать jQuery html() метод вместо innerHTML?
моя проблема: я работаю на уже разработанных страницах, страницы содержат таблицы и в JavaScript innerHTML свойство используется для их динамического заполнения.
приложение работает нормально на Firefox но Internet Explorer выдает ошибку:unknown runtime exception. Я использовал jQuery html() способ и IEошибка исчезла. Но я не уверен, что это будет работать для всех браузеров, и я не уверен, следует ли заменить все innerHTML свойства с jQuery html() метод.
Спасибо большое.
7 ответов:
чтобы ответить на ваш вопрос:
.html()просто позвоню.innerHTMLпосле выполнения некоторых проверок для типов узлов и прочее. Он также используетtry/catchблок, где он пытается использоватьinnerHTMLво-первых, и если это не удастся, он будет отступать изящно к jQuery.empty()+append()
в частности, относительно "могу ли я полностью полагаться на метод jQuery html (), который он будет выполнять как innerHTML" мой ответ-нет!
запустите это в internet explorer 7 или 8, и вы увидите.
jQuery создает плохой HTML при установке HTML, содержащего тег
innerHTML не является стандартным и может не работать в некоторых браузерах. Я использовал html () во всех браузерах без проблем.
если вы задаетесь вопросом о функциональности, то jQuery
.html()выполняет то же самое предназначены функции как.innerHTML(), но он также выполняет проверки на кроссбраузерность.по этой причине всегда используйте jQuery
.html()вместо.innerHTML()там, где это возможно.
учитывая общие поддержка
.innerHTMLв эти дни, единственное эффективное различие сейчас является то, что.html()будет выполнить код в любом<script>теги если есть какие-либо в html вы даете его..innerHTML,под HTML5 не будет.по дизайну, любой конструктор или метод jQuery, который принимает строку HTML-jQuery (),.добавлять. ,)(после () и т. д. - может выполнять код. Это может произойти путем введения тегов скрипта или использования атрибутов HTML, которые выполняют код (например,
<img onload="">). Не используйте эти методы для вставки строк, полученных из ненадежных источников, таких как параметры URL-запроса, файлы cookie или входные данные формы. Это может привести к возникновению уязвимостей межсайтового скриптинга (XSS). Удалите или экранируйте любой пользовательский ввод перед добавлением содержимого в документ.Примечание:
.innerHTMLи.html()может выполнять js другими способами (например,onerrorатрибут.)
вот некоторый код, чтобы вы начали. Вы можете изменить поведение .innerHTML -- вы даже можете создать свой собственный полный .innerHTML прокладка. (С. П.: переосмысление .innerHTML также будет работать в Firefox, но не Chrome-они работают над этим.)
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)