jQuery: при создании нового элемента мне нужен конечный тег? - PullRequest
12 голосов
/ 02 июля 2011
var $div = $('<div class="error">').appendTo($('#header'));

При создании новых элементов и добавлении их в DOM вам нужен конечный тег?Почему или почему нет?Мне нужен только конечный тег, если я помещаю контент в тег, который я создаю?например так:

var $div = $('<div class="error"> Error-Homie! </div>').appendTo($('#header'));

или я могу создать элемент с содержимым в нем, но пропустить конечный тег?Хорошо?Плохо?

var $div = $('<div class="error">').appendTo($('#header'));

Ответы [ 4 ]

15 голосов
/ 02 июля 2011

Хотя это может работать, если вы не используете закрывающий тег (или, по крайней мере, самостоятельно закрываете тег), вам следует добавить закрывающий тег (самозакрытие) (как уже упоминалось, для кроссплатформенная совместимость ):

Для обеспечения кроссплатформенной совместимости фрагмент должен быть правильно сформирован. Теги, которые могут содержать другие элементы, должны быть связаны с закрывающим тегом:

$('<a href="http://jquery.com"></a>');

В качестве альтернативы, jQuery допускает синтаксис XML-подобного тега (с пробелом или без пробела перед косой чертой):

$('<a/>');

Теги, которые не могут содержать элементы, могут быть быстро закрыты или нет:

$('<img />');
$('<input>');

Вот как jQuery создает элементы:

Если HTML более сложный, чем отдельный тег без атрибутов, как в приведенном выше примере, фактическое создание элементов обрабатывается механизмом браузера innerHTML. В большинстве случаев jQuery создает новый элемент и присваивает свойству innerHTML элемента тот фрагмент кода HTML, который был передан. Когда параметр имеет один тег, такой как $('<img />') или $('<a></a>'), jQuery создает элемент используя встроенную функцию JavaScript createElement().


Btw. Вы также можете передать данные в качестве второго параметра:

$('<div />', {'class': 'error', text: 'Error-Homie!'})
1 голос
/ 02 июля 2011

вам нужен конечный тег: http://api.jquery.com/appendTo/ например

$('<p>Test</p>').appendTo('.inner');

также должно быть

.appendTo('#header');

а не

.appendTo($('#header'));
0 голосов
/ 02 июля 2011

Вам всегда нужно, чтобы конечный тег имел правильный HTML.

Но факт, что большинство браузеров допускают такие ошибки, является фактом.Это не причина быть ленивым, однако, вы не должны полагаться на терпимость браузера для работы вашего кода.Здесь есть допуск, чтобы можно было отображать сайты с несколькими ошибками, чтобы не предупреждать заведомо неправильный код.

0 голосов
/ 02 июля 2011

Вы, вероятно, можете сделать это так

$('<div/>',{class:'error'}).html('Error-Homie!').appendTo($('#header'));
...