使用jquery-template {{wrap}}来包装纯文本

时间:2011-06-22 21:19:13

标签: javascript jquery jquery-templates

使用jQuery模板,我正在尝试使用{{wrap}}模板标记来包装另一个模板的结果。第二个模板呈现纯文本,而不是HTML。我目前得到一个空字符串,我希望得到包装模板呈现的纯文本。

如果我使用一些HTML元素(如<div>标记)包围纯文本,那么一切正常,但我会将<div>渲染到结果中。我可以在我的内容周围创建一个虚拟标记,以使{{html}}标记起作用,但我不希望它在渲染结果中。

我还想使用这个相同的包装器,如果可能的话,还可以包装实际生成HTML的模板,所以如果相同的包装器模板可以适用于这两种情况,那将是很好的。

这是我的代码:

$("#x").html($("#myTmpl").tmpl());

<div id="x" />
<script id="myTmpl" type="text/x-jquery-tmpl">
  The following wraps some non-HTML content: {{wrap "#wrapper"}} help {{/wrap}}
</script>

<script id="wrapper" type="text/x-jquery-tmpl">
  <table>
    <tbody>
      <tr>
        <td>
          Wrapped content: {{html $item.html}}
        </td>
      </tr>
    </tbody>
  </table>
</script>

此代码可在此jsFiddle中找到:http://jsfiddle.net/bernardchen1/BYdeg/

1 个答案:

答案 0 :(得分:0)

我最终找到了解决方案。我创建了一个使用虚拟标签来包装纯文本(甚至是由其他模板生成的html),然后我创建了一个函数,我将其传递给模板调用,可以去掉虚拟标签。我这样调用它:{{html $data.clean($item)}}。 “clean”函数需要访问内部模板返回的内容,我发现它是$item.wrapped[0]。一旦我有了这些内容,我就可以让它的内部html从clean函数返回。

我担心我是否应该访问$item.wrapped

最终,我可能只是尝试重构我的代码,不需要这个虚拟标签和清洁功能。

此解决方案可在此处找到:http://jsfiddle.net/bernardchen1/nmzWt/

编辑:还有另一种解决方案,可以调用appendTo将模板html附加到另一个DOM元素,然后再将数据拿回来。