在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"divheightmynav.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=hellodiv之前添加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");

类似的问题:

  • jQuery document.createElement是否等同?
  • 在jQuery中创建一个div元素
  • 什么是使用jQuery创建HTML元素的最有效方法?
  • 链接地址: http://www.djcxy.com/p/83367.html

    上一篇: creating an element in jquery

    下一篇: jQuery create element containing child element