我在一些代码中看到了这一点:
$("<p/>").append("<div>something</div>").appendTo("body");
并注意到它会自动关闭生成的HTML中的p
标记:
<p><div>something</div></p>
我之前从未见过选择器语法$("<p/>")
。这是错误(Chrome只是猜测它应该是什么)还是这是jQuery选择器语法的一个特性?
答案 0 :(得分:8)
$
函数严重超载,即使字符串有两个功能。如果字符串是CSS选择器,它将返回包含文档中匹配元素的对象。如果您使用<
打开,则创建元素。但是,jQuery没有创建标签。元素属于DOM,标签属于HTML,它是DOM的序列化。
$("<p/>") //Creates a p element
.append("<div>something</div>") //inserts a child element, which is a div you created
//containing the string "something"
.appendTo("body"); //tags the newly created paragraph element, with its div child
//and inserts it into the DOM as a child of the body element.
序列化文档时,您将结束:
<body><p><div>something</div></p></body>
显示包含其子元素的每个元素。
如果您的标记如下所示:<p/><div>something</div>
,那么p
和div
元素就是兄弟。如果将它们附加到同一父母身上,就会发生这种情况:
//Use add to create a new element and add it to the jQuery collection object
//instead of appending it as a child to the p element.
$("<p/>").add("<div>something</div>").appendTo("body");
答案 1 :(得分:6)
它是一个功能,jQuery正确呈现标记。
答案 2 :(得分:4)
jQuery的功能看看当默认情况下你将它作为一个自闭项标签时会发生什么,比如链接
$("<link/>").append("<div>something</div>").appendTo("body");
生成
<link><div></div></link>
这显然是错误的。但这就是被要求做的事情!
答案 3 :(得分:2)
<p/>
是<p></p>