在jquery中创建一个元素
所以,我知道如何以各种方式在jQuery中创建元素。 但是我今天之前从未遇到过这样的情况:
var myspacer = $('<div />', {
"id": "nav-spacer",
"height": mynav.outerHeight()
});
在后面的代码中,这个变量通过jQuery的.before()方法添加到DOM中。 有人可以解释这里发生了什么吗? 什么样的对象正在创建? jQuery如何知道如何将它变成HTML元素?
这是jQuery()
函数的$( html, props )
语法 - 它在API文档中有相当清楚的解释:
html
定义单个独立HTML元素(例如<div/>
或<div></div>
)的字符串。
props
用于调用新创建的元素的属性,事件和方法的映射。
如果该函数确定第一个参数是一个看起来像html片段的字符串,它将从该片段创建一个新元素(或多个元素)。 如果您在第二个参数中传递一个映射,它会在新创建的元素上创建指定的属性。
新元素不会自动添加到文档中,但您似乎已经看到,因为您提到了添加它的.before()
代码。
根据jQuery $( html, properties)
语法,上面的代码创建一个id="nav-spacer"
的div
, height
由mynav.outerHeight()
方法提供,没有任何内容作为jQuery对象,但没有添加到DOM。
在$( html, properties)
, html
是字符串, properties
是属性/事件的集合等等。
另一种方法可能是:
var myspacer = $('<div id="nav-spacer" height="'+ mynav.outerHeight() +'"></div>');
但是你的一个更具可读性和效率。
在选择器作为参数传递.before()
之前,使用.before()
方法将myspacer
添加到DOM中。 例:
myspacer.before('div.hello');
在class=hello
的div
之前添加myspacer
,如:
<div id="nav-spacer" height="some_value"></div>
<div class="hello"></div>
如果你像HTML $('<div/>')
那样传递HTML,jQuery会创建一个新元素,因为它很聪明。 :P它认识到该字符串是HTML(而不是选择器)并以不同的方式对待它。 看文档。
新元素创建但不添加到DOM直到你自己添加它,例如。 用appendTo()
。
从文档中:“为了确保跨平台兼容性,代码片段必须格式良好,可以包含其他元素的代码应该与结束代码配对。”
编辑:我纠正,你可以写$('<div/>')
没有明确的结束标记。 只要HTML不包含嵌套元素(当然),这就行得通了。 查看文档中的其他示例:
// With nested elements and closing tags - HTML must be well formed
$("<div><p>Hello</p></div>").appendTo("body");
// Without closing tag - HTML is still well formed
$("<div/>", {
"class": "test",
text: "Click me!",
click: function(){
$(this).toggleClass("test");
}
}).appendTo("body");
类似的问题: