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

时间:2013-09-01 01:37:46

标签: jquery

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

<div class="btn-group">
  <button class="btn dropdown-toggle" title="Manage" data-toggle="dropdown">
    <span class="caret"></span>
  </button>
</div>

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

  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  ??  "
  });

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

3 个答案:

答案 0 :(得分:3)

如果我建议采用传统方法,我会做这样的事情:

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);

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

我相信这种传统方法有几个优点:

  • 即使您不是100%熟悉jQuery API,这也很简单。
  • 它是原生的,所以它可能更快,因为它不必调用任何解析器。
  • 首先定义每个元素,然后定义关系,所以我认为它更清晰。

如果您发现时间过长,而且更常见 - 应将此类代码提取到方法

function buildButtonGroup(){
    // rest of the code here
    return group;
}

答案 1 :(得分:0)

我可以选择像

这样的东西
var $div = $('<div />', {
    class: 'btn-group'
});
var $btn = $('<button />', {
    class: 'btn dropdown-toggle'
}).appendTo($btn)
$('<span />', {
    class: 'caret'
}).appendTo($div)

对于更复杂的dom结构,我可以选择underscorejsrender等模板

答案 2 :(得分:0)

这应该可行,但您也可以构建一个html字符串并将其转换为$(html);;

var btnGroup = $("<div/>", {"class": "btn-group"});

var btn = $('<button/>', {
      'class': 'btn dropdown-toggle',
      title: "Manage",
      "data-toggle": "dropdown"
    });
btn.append($('<span/>', {'class': 'caret'});
btnGroup.append(btn);

这也是可以接受的:

var btnGroup = $('<div class="btn-group"> <button class="btn dropdown-toggle" title="Manage" data-toggle="dropdown"> <span class="caret"></span> </button> </div>');