我有理由使用$('<div></div>')
代替$('<div>')
吗?
或$('<div><b></b></div>')
代替$('<div><b>')
?
我喜欢后者,因为它更短。
答案 0 :(得分:5)
jQuery会自动为你关闭标签,不需要自己关闭它。
$('<div>')
是一件非常好的事情
然而,在第二件事中你要追加<b>
我会这样做:
$('<div>',{html: $('<b>')}); // or $('<div>').append($('<b>'))
答案 1 :(得分:3)
我在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 :(得分:2)
这取决于您是使用单个标签还是多个标签来创建元素/元素。
如果您使用单个标记,jQuery将使用document.createElement
方法创建元素,因此使用"<div/>"
或"<div></div>"
无关紧要。
如果您有多个元素,jQuery将通过创建div
元素并将HTML代码放在innerHTML
属性中来创建元素。要使浏览器正确解析HTML代码,您必须根据您使用的HTML版本编写它。如果您正在为页面使用XHTML,那么用于创建元素的HTML代码也必须是XHTML。
答案 3 :(得分:0)
jQuery为您做到了这一点,但考虑编写正确的HTML以获得更好的可读性(问题中的前者):)