如何使用jquery添加html

Posted

技术标签:

【中文标题】如何使用jquery添加html【英文标题】:how to add html using jquery 【发布时间】:2013-10-05 17:12:30 【问题描述】:

我有一些简单的 jquery 代码,我用它来动态创建 this page 而不是手动创建。这是我的代码

循环

for ( var i = 0; i < links.length; i++ ) 
    $("#programs").append(
        $("li")
        .html("div")
        .html("a", 
            href: links[i] + ".exe"
        )
        .html("img", 
            src: icons[i]
        )
        .html("p")
        .html(captions[i])
    );

数组声明

var links = ["pictureVeiwer","maze","firefoxPrank"];

var icons = ["firefox-icon.gif","maze.jpg","imageVeiwer.jpg"];

var captions = ["Cute Firfox prank","Cool maze","Program to veiw pictures... kinda useless in 2013"];

我认为我的语法有点不对劲,我之前使用过类似的代码,但不是在循环中。我做错了什么,我该怎么做?

fiddle.

【问题讨论】:

【参考方案1】:

$("li")选择页面上所有的li元素,其实你并没有创建新元素,应该是:

$("<li/>");

或:

$("<li></li>");

另外你链接.html() 覆盖以前内容的方法,我建议单独创建元素,像这样:

for (var i = 0; i < links.length; i++) 
    var $li = $("<li/>"),
        $a = $("<a/>",  href: links[i] + ".exe", text: 'whatever' ),
        $img = $('<img/>',  src: icons[i] );
        $div = $('<div/>').append($a).append($img);

    $li.append($div).appendTo('#programs');  
      // |          |
      // |          ---- append the `li` element to #programs            
      // |           
      // ---- append to the `li` element

如果您要动态生成许多元素,您可以考虑使用模板库,如 Handlebars、EJS 或 Mustache。

【讨论】:

感谢到目前为止的帮助,但我仍然得到这个 - jsfiddle.net/mendelthecoder/zwhgw/3 - 它添加了html 元素之外 @tryingToGetProgrammingStraight .append() 方法不返回附加元素,它返回当前集合,这就是我建议单独创建元素的原因,你目前正在做的是写意大利面条式/无法管理的代码(抱歉)会产生意想不到的结果。 你能在里面写一个“img”吗?【参考方案2】:

我想我在这里工作了。有点冗长,但也更清楚:

for ( var i = 0; i < links.length; i++ ) 
    // Each list item will contain a div
    var $li = $("<li/>")

    // Each div will have a link, and that link will have an image and a caption
    var $div = $("<div/>");

    // Give the link its image
    var $a = $("<a/>", 
        href: links[i] + ".exe"
    );
    var $img = $("<img/>", 
        src: icons[i]
    );
    $a.append($img);

    // Give the link its caption
    $p = $("<p/>");
    $p.html(captions[i]);
    $a.append($p);

    // Give the div its link
    $div.append($a);

    // Give the list item its div
    $li.append($div);

    // Add the list item to the list
    $("#programs").append($li);

Fiddle (您需要在自己的网站上试用,您的图片可以在该网站上引用。)

【讨论】:

输出是 &lt;li&gt; &lt;div&gt; &lt;a href="firefoxPrank.exe"&gt; &lt;img&gt; &lt;/a&gt; &lt;p&gt;Program to veiw pictures... kinda useless in 2013&lt;/p&gt; &lt;/div&gt; &lt;/li&gt; (1) pa 之外 (2) 在 img 中没有 src 已修复问题 (1) - jsfiddle.net/mendelthecoder/zwhgw/6 如果您也可以修复 src 问题,我将接受 找到并修复 (2) - jsfiddle.net/mendelthecoder/zwhgw/8 - 在 img 之前缺少 $((以及结束 ) 哎呀,我错过了。很高兴你抓住了它。我会为后代解决我的答案。 Revision 8 (jsfiddle.net/mendelthecoder/zwhgw/8) 看起来可行。 borisute.com/geshem/2013/mkeller/programs.html 有什么不工作的地方吗?【参考方案3】:

你也可以使用模板,就像 Underscore 提供的那样:

HTML:

<script type="text/template" id="list-template">
    <li>
        <div>
            <a href="<%= href %>"><img src="<%= src %>"></a>
            <p><%= caption %></p>
        </div>
    </li>
</script>

<ul id="programs"></ul>

<script src="http://underscorejs.org/underscore-min.js"></script>

JS:

var $programsList = $('#programs');
var listTemplateHtml = $('#list-template').html();
for ( var i = 0; i < 3; i += 1 ) 
    var li = _.template(listTemplateHtml, 
        href: links[i] + ".exe",
        src: icons[i],
        captions: captions[i]
    );
    $programsList.append(li);

这会更容易和更易于维护,并且可能也会产生更好的性能。

【讨论】:

以上是关于如何使用jquery添加html的主要内容,如果未能解决你的问题,请参考以下文章

如何将表头添加到使用 jQuery 中的 getJSON() 函数创建的 html 表中

如何使用 jQuery 将 Kendo DropDownList 动态添加到 html5 表中

如何使用 jQuery 在按钮单击时添加额外的 html 表格行?

如何通过使用jquery聚焦来添加元素

jquery中 如何 使用 append() 方法 新添加的元素? $('#id').html()取不到值?

如何使用jQuery动态添加表单元素