jQuery: риск закрытия тегов в конструкторах - PullRequest
5 голосов
/ 10 мая 2011

Есть ли причина, по которой я бы использовал $('<div></div>') вместо $('<div>')?

Или $('<div><b></b></div>') вместо $('<div><b>')?

Мне нравится последнее в обоих случаях, потому что оно короче.

Ответы [ 4 ]

5 голосов
/ 10 мая 2011

jQuery автоматически закрывает теги для вас, нет необходимости закрывать его самостоятельно.

$('<div>') - это очень хорошая вещь, которую нужно сделать

Во второй части, которую вы добавляете<b> я бы сделал:

$('<div>',{html: $('<b>')}); // or $('<div>').append($('<b>')) 

Скрипка: http://jsfiddle.net/maniator/m9wbb/

3 голосов
/ 10 мая 2011

Я обнаружил крайние случаи в IE, где мой код был волшебным образом исправлен с использованием $("<div></div>") вместо $("<div>"). Я всегда делаю это из паранойи.

Я уверен, что в какой-то момент в документации jQuery было сказано, что вы должны закрыть все свои теги. Это больше не относится к 1.6, но если вы используете 1.3.2 или 1.4.2, вы можете закрыть их, чтобы быть в безопасности.

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

Источник

var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;

...

// If a single string is passed in and it's a single tag
// just do a createElement and skip the rest
ret = rsingleTag.exec(selector);

if (ret) {
    if (jQuery.isPlainObject(context)) {
        selector = [document.createElement(ret[1])];
        jQuery.fn.attr.call(selector, context, true);

    } else {
        selector = [doc.createElement(ret[1])];
    }

} else {
    ret = jQuery.buildFragment([match[1]], [doc]);
    selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
}   

В этом случае с $("<div>") вы обнаружите, что ret[1] является "div", поэтому он вызывает document.createElement("div").

2 голосов
/ 10 мая 2011

Это зависит от того, используете ли вы один тег или несколько тегов для создания элемента / элементов.

Если вы используете один тег, jQuery будет использовать метод document.createElement для создания элемента, поэтомуне имеет значения, используете ли вы "<div/>" или "<div></div>".

Если у вас есть несколько элементов, jQuery создаст элементы, создав элемент div и поместит HTML-код в свойство innerHTML,Чтобы браузер правильно проанализировал HTML-код, вы должны написать его в соответствии с используемой HTML-версией.Если вы используете XHTML для страницы, HTML-код, который вы используете для создания элементов, также должен быть XHTML.

0 голосов
/ 10 мая 2011

jQuery сделает это за вас, но подумайте над написанием правильного HTML для лучшей читабельности (первое в вопросе):)

...