创建复杂元素的正确方法是什么?

Sim*_*ler 5 jquery

在 jQuery 中创建以下 div 元素的最佳方法是什么?

<div class="btn-group">
  <button class="btn dropdown-toggle" title="Manage" data-toggle="dropdown">
    <span class="caret"></span>
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)

我尝试了多种格式,但我似乎无法做到正确。

  var itemsButtonsDiv = $('<div><button><span></span></button></div>')
    .addClass("btn-group")
    .attr({
      title: "Manage",
      "data-toggle": "dropdown"
    })
    .find("button")
      .addClass("btn dropdown-toggle")
      .find("span")
        .addClass("caret")
  ;


  var itemsButtonsDiv = $("<div><button><span></span></button></div>", {
    "class": "btn-group",
    html: "  ??  Does everything else go here as one long text string  ??  "
  });
Run Code Online (Sandbox Code Playgroud)

我意识到在创建元素后必须单独附加元素,但我无法正确创建。

Ben*_*aum 5

如果我可以建议一种传统的方法,我会做这样的事情:

var group = document.createElement("div");
group.className = "btn-group";

var btn = document.createElement("button");
btn.className = "btn dropdown-toggle";
btn.title = "Manage";
btn.setAttribute("data-toggle","dropdown");

var caret = document.createElement("span");
caret.className = "caret";

btn.appendChild(caret);
group.appendChild(btn);
Run Code Online (Sandbox Code Playgroud)

如果你想从 dom 元素中创建一个 jQuery 元素,你可以做$(group).

我认为这种传统方法有几个优点:

  • 发生的事情非常简单,即使您不是 100% 熟悉 jQuery API。
  • 它是原生的,因此它可能更快,因为它不必调用任何解析器。
  • 每个元素都是先定义的,关系是后定义的,所以我觉得这样更清晰。

如果你发现它太长,而且更普遍 - 这种代码应该被提取到一个方法中

function buildButtonGroup(){
    // rest of the code here
    return group;
}
Run Code Online (Sandbox Code Playgroud)