从模板元素创建元素?

Dam*_*che 16 jquery

我遇到了一些麻烦:

template = $("#template");
$(template).attr("id", "newid");

$(template).appendTo("body");
Run Code Online (Sandbox Code Playgroud)

我想要做的是为模板分配一个id,然后修改内容.麻烦的是,我目前指的是实际的模板元素,因此id正在改变它.再次使用此模板时,由于ID不同,我无法选择.

关于最佳方法的任何建议?

Ujj*_*har 21

克隆对象:

template = $("#template").clone();
template.attr("id","newid");
template.appendTo("body");
Run Code Online (Sandbox Code Playgroud)

  • 但随后它创建了一个“模板”类型的新节点。我只是想要它的身体。 (2认同)

小智 11

HTML5提供了一个template元素:

contents = $('#template').html();
copy = $('<div id="copy"></div>');
$('body').append(copy.append(contents));
Run Code Online (Sandbox Code Playgroud)

HTML部分:

<html>
  <body>
    <template id='template'>
    </template>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这种clone方法还不够.


Pau*_*tch 10

关于代码的三个注释:

所以你的代码看起来像:

var $template = $("#template").clone();
$template.attr("id", "newid");

$template.appendTo("body");
Run Code Online (Sandbox Code Playgroud)

  • 因为创建jQuery对象是很多工作(你可以看看jQuery源代码)以及为什么要再次执行它,如果你已经完成它并将结果存储在变量中?即使它不是那么多工作,即使它只是缓存读取,只需引用已经存储的变量总是比其他任何东西都要快. (2认同)

4ja*_*ier 8

对我来说clone()没有工作<template>。最佳答案是 Manuel 的答案,但为了从模板生成 JQuery 对象而不像他那样添加元素,我使用了这一行:

var template = $($("#template").html());
Run Code Online (Sandbox Code Playgroud)

用这个html

<html>
 <body>
  <template id='template'>
  </template>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)