在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");
类似的问题:
