代码之家  ›  专栏  ›  技术社区  ›  StaxMan

使用jQuery构建HTML(~=DOM)

  •  18
  • StaxMan  · 技术社区  · 17 年前

    我可能做错了什么,但我还没有找到一种动态构建基本HTML/DOM结构(如列表)的好方法。简单的例子是在给定json(对象)等输入的情况下构建一个表(表元素、行、单元格,以及正确转义的文本内容)。

    我遇到的问题是,大多数调用(如“.append()”、“.html()”、“.text()”)似乎没有以直观的方式(无论如何,对我来说)链接。比如你

    $("#divId").append("<table>").append("<tr>").append("<td>").text("some text");
    

    text()调用似乎清除了主级别的内容;和附录同样在同一范围内添加内容。我希望appennd()返回被添加的内容,但它似乎返回自己的上下文。

    我知道有一个简单的“appendText()”扩展可以帮助处理最后一部分。但是其他人呢?

    $("#divId")[0].appendChild(document.createElement("table"))....
    

    但这太冗长了。

    我试着浏览jQuery参考文档,用谷歌搜索,但大多数文档只使用“将所有内容嵌入字符串”;它有问题,包括没有正确引用文本内容。

    "JQuery: Build HTML in ‘memory’ rather than DOM"

    4 回复  |  直到 9 年前
        1
  •  14
  •   cletus    17 年前

    您可以这样做:

    $("#divId").append("<table>").append("<tr>").append("<b>").text("some text");
    

    作为:

    $("#divId").append("<table><tr><td><b>some test</b></td></tr></table>");
    

    或

    $("<b></b>").text("some text").appendTo("<td></td>").appendTo("<tr></tr>").appendTo("<table></table>").appendTo("#divId");
    
        2
  •  7
  •   Marc-André Lafortune    14 年前

    append :

    $("#divId").append(
      $("<table/>").append(
        $("<tr/>").append(
          $("<td/>").append(
            $("<b/>").text("some text")
    ))));
    

    appendTo ,但它的直观性较差,速度较慢,需要更多的按键:

    $("<b/>").text("some text").appendTo(
      $("<td/>").appendTo(
        $("<tr/>").appendTo(
          $("<table/>").appendTo(
            "#divId"
    ))));
    

    在任何情况下,使用 .text("...") 转义特殊字符(并避免XSS攻击)。

    更好 ,当你对写这些感到厌烦时,你真的想研究 jsrender mustache , handlebars , doT 或者任何其他javascript模板解决方案。它允许您将代码与HTML分开(想想MVC),并使您构建的内容更加清晰。它也更容易修改。

        3
  •  2
  •   StaxMan    17 年前

    快速提示:另外, AppendDOM 插件看起来也可以简化任务。

        4
  •  0
  •   efunneko    13 年前

    您还可以使用jQuery createHtml 允许您执行以下操作的插件:

    $("#divId").$table().$tr().$td().$b("some text");
    

    使用.append()链更方便,因为您可以在元素中放置html内容和属性,同时将它们串在一起:

    $("#divId").$table({class: "clean"}).$tr().$td({id: "textId"}).$b("some text");