2015-04-02 4 views
9

Я бегу следующий JavaScript как в Firefox Developer Edition 38 и Internet Explorer 8 и 9.

console.log('+++++++++++++++++++++++++++++++'); 
console.log('jquery version = ' + $.fn.jquery); 
var myHtmlString = "<!-- my comment -->" + 
         "<optgroup label='my label'>" + 
         "<option value='1'>option one</option>" + 
         "</optgroup>"; 

console.log($(myHtmlString)); 
console.log($(myHtmlString)[0]); 
console.log($(myHtmlString)[1]); 
console.log($(myHtmlString).length); 

В Firefox, я получаю:

enter image description here

В IE, я получаю:

enter image description here

Так, очевидно, в Firefox комментарий HTML i s добавляется как элемент этого объекта, но в IE это не так. Почему это ведет себя так, есть ли ошибка, или есть ли другой способ создать этот объект?

ПРИМЕЧАНИЕ: Я пробовал $.parseHTML(myHtmlString), но он делает то же самое.

ОБНОВЛЕНИЕ: Этот ответ How does jQuery treat comment elements? обеспечивает возможное обходное решение.

+0

Что такое '[object Object]' в журнале IE? Вы уверены, что это не ваш комментарий. –

+0

@JonathanWood Посмотрите на отличный вывод '$ (myHtmlString) .length' – ceejayoz

+3

Я не могу найти ссылку, но комментарии, созданные в javascript, не поддерживаются в IE, если я правильно помню, если они не созданы с помощью' document. createComment', и я не думаю, что jQuery использует это. – adeneo

ответ

19

Так это зависит от используемого браузера, но так как вы передаете в более чем 1 просто помечать, (в качестве примера $('<div>example html creation</div>')) JQuery позволяет браузера обрабатывать создание.

Если HTML является более сложным, чем один тег без атрибутов, как в приведенном выше примере, фактического создания элементов обрабатываются .innerHTML механизма браузера. В большинстве случаев, JQuery создает новый элемент и устанавливает свойство innerHTML элемента в HTML-фрагмент, который был передан в.

jQuery documentation

Firefox, например, просматривает каждый из ваших < > областей , и он находит 2. Хотя IE не заботится и обрабатывает все как 1 (отсюда длина 1).

Короткий рассказ, вы делаете это хорошо. Это только внутренне, как браузер обрабатывает его, вам не нужно беспокоиться об этом!

+0

Если ему нужен узел комментариев, то это не очень хорошо. Тот факт, что браузеры обрабатывают его по-разному *, - это проблема. Не говоря уже о том, что возвращается неправильный узел Element. –

+0

@mcpDESIGNS вы правы: '$ (". My-class "). Html (" ") .html()' возвращает '" "в IE и' " в chrome/firefox – kleaver

+2

Я не уверен что я не понимаю о вопросе ... но это похоже на вопрос. –

Смежные вопросы