В 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)