使用jQuery构建HTML(〜= DOM)

Sta*_*Man 18 html jquery dom

我可能做错了什么,但我还没有找到一种很好的方法来动态地构建基本的HTML/DOM结构,比如列表.简单的例子是给出像json(objects)这样的输入,构建一个表(表元素,行,单元格,具有正确转义的文本内容).

我遇到的问题是,大多数调用(如".append()",".html()",".text()")似乎并不直观(对我而言).例如,你不能做类似的事情:

$("#divId").append("<table>").append("<tr>").append("<td>").text("some text");
Run Code Online (Sandbox Code Playgroud)

text()调用似乎消灭了主要级别的内容; 并附加同样添加相同范围内的东西.我希望appennd()能够返回添加的内容,但它似乎正在返回自己的上下文.

我知道有一个简单的"appendText()"扩展,它有助于最后一部分.但其他人怎么样?

对于它的价值,现在我通过类似的方式回归到DOM

$("#divId")[0].appendChild(document.createElement("table"))....
Run Code Online (Sandbox Code Playgroud)

但那很啰嗦.

所以我希望我错过了一些完全明显的东西......但是什么呢?除了追加()以外的电话?

我尝试浏览jQuery参考文档,谷歌搜索,但大多数文档只是使用"嵌入字符串中的所有东西"; 哪些问题,包括没有正确引用文本内容的问题.

(还有:不,这不是"JQuery:在'内存'而不是DOM中构建HTML"的重复"

cle*_*tus 14

你可以这样做:

$("#divId").append("<table>").append("<tr>").append("<b>").text("some text");
Run Code Online (Sandbox Code Playgroud)

作为:

$("#divId").append("<table><tr><td><b>some test</b></td></tr></table>");
Run Code Online (Sandbox Code Playgroud)

要么

$("<b></b>").text("some text").appendTo("<td></td>").appendTo("<tr></tr>").appendTo("<table></table>").appendTo("#divId");
Run Code Online (Sandbox Code Playgroud)

  • 在你的第三个例子中你可以缩短事件并做$('<b />').text('boldedtext'); (4认同)

Mar*_*une 7

你可以使用append:

$("#divId").append(
  $("<table/>").append(
    $("<tr/>").append(
      $("<td/>").append(
        $("<b/>").text("some text")
))));
Run Code Online (Sandbox Code Playgroud)

如果你真的坚持,你可以使用appendTo,但它不太直观,速度会慢一些,并且需要更多的按键操作:

$("<b/>").text("some text").appendTo(
  $("<td/>").appendTo(
    $("<tr/>").appendTo(
      $("<table/>").appendTo(
        "#divId"
))));
Run Code Online (Sandbox Code Playgroud)

无论如何,使用它.text("...")来逃避特殊字符(并避免XSS攻击)非常重要.

更好的是,当你厌倦了写这些时,你真的想要研究jsrender,胡子,把手,doT或许多javascript模板解决方案中的任何其他.它允许您将代码与HTML分开(想想MVC),并使您更清楚自己构建的内容.修改起来也容易得多.