【问题标题】:Creating dynamic span创建动态跨度
【发布时间】:2012-10-18 14:17:39
【问题描述】:

如何创建动态标签?

$("<img />").attr({
    id: "image-1",
    src: "/images/flower.png",
}).appendTo("#" + imgContainer);

它将创建&lt;img src="/images/flower.png" id="image-1" /&gt;

我想在&lt;img&gt; 标签周围创建&lt;span&gt; 标签。

即&lt;span&gt;&lt;img src="/images/flower.png" id="image-1" /&gt;&lt;/span&gt;

【问题讨论】:

    标签: javascript jquery html tags


    【解决方案1】:

    DOM 操作非常昂贵;只需准备好你要的标记,然后然后根据需要附加它!

    //Before:
    $("<img />")                   //#1, create an element outside of the tree
    .attr({                        //#2? change its attributes
      id: "image-1",
      src: "/images/flower.png"
    })
    .appendTo("#" + imgContainer)  //#3, add the element to DOM
    .wrap("<span />");             //#4, create and add another element to DOM
    
    //After:
    $('<span><img src="/images/flower.png" id="image-1"></span>')  //#1
    .appendTo("#" + imgContainer);                                 //#2
    

    这里是a jsperf test case,第一种情况下约为 5K ops/sec,后一种情况下约为 14K(在我相当不错的盒子上)。

    这也不是过早的优化。例如,如果您有 ajax 填充的 7x10 表格,并且您单独创建每个单元格......并将它们包装到 &lt;tr&gt; 元素中......然后将其添加到表格中,开销就会增加。对字符串进行操作,您的脚本将至少快 80 倍!

    要记住的另一个方面是 jsperf 仅显式测量 javascript 性能。如果你在操作一个表格,它的内容会更加激进re-painted/re-flown。

    【讨论】:

    • @VisioN: 嗯... 不, that code is even slower than the original - 关键在于选择正确的快捷方式并避免不必要的快捷方式
    • @VisioN: ಠ_ಠ 你试过了吗?我在上面的评论中更新了 jsperf 链接
    【解决方案2】:

    您可以使用wrap() 将一个元素包裹在另一个元素中。例如:

    $("<img />").attr({
        id: "image-1",
        src: "/images/flower.png",
    })
    .appendTo("#" + imgContainer)
    .wrap("<span />");
    

    【讨论】:

    【解决方案3】:

    你可以使用wrap():

    $("<img />").attr({
        id: "image-1",
        src: "/images/flower.png"
    }).appendTo("#" + imgContainer).wrap("<span />")
    

    【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2018-04-07
    • 2020-05-30
    • 2021-07-30
    • 1970-01-01
    • 2020-05-14
    • 2016-09-08
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多