【问题标题】:Suggested method for generating html with different elements on the fly动态生成具有不同元素的 html 的建议方法
【发布时间】:2013-09-30 21:41:24
【问题描述】:

我想动态生成一些元素(事先不知道有多少)并将它们粘合在一起并从本质上扩展一个 div,比如 id 为“myDiv”。出于演示目的,假设客户端收到一条消息,通过扩展 div 动态生成三个按钮的列表。

我被卡住了,因为我生成这样的列表

var temp = "<ul>";
for (i = 0; i < someTimes; i++) {
    temp += "<li>some text <div id=\"button" + i + "\"></div></li>";
}
temp += "</ul>";

然后做

document.getElementById('myDiv').innerHTML = html;

为了生成每个按钮,我最初的意图是 do this 以便将每个按钮附加到在 while 循环中动态生成的适当 div 中。但这东西行不通。对于像我这样的新手来说,也许这里有一些东西;

  1. 是否有我可以在 for 循环中使用的 Javascript 示例来动态生成按钮,给它们我想要的 id 并委托它们?
  2. 我是否应该将第一部分从 Javascript 转换为 jQuery,然后用 jQuery 同时做这两件事?如何(在本例中)?
  3. 这些东西有什么好的参考吗?

提前感谢您抽出宝贵时间。我不希望所有三个问题都得到答案,但我想得到一个关于如何实现这个小目标的答案,作为我如何继续工作的指导。

【问题讨论】:

  • 使用 jquery 会更好
  • 谢谢。但是,这么简单的事情在jQuery中怎么做呢?
  • 网上有很多例子,stackoverflow里有很多问题。一个好的起点是api.jquery.com
  • 接收到的消息会是什么样子?什么格式的json,xml?
  • 接收消息将是一个 json,指示我们必须迭代多少次(实际上不止于此,但我相信这对于示例来说已经足够了)。

标签: javascript jquery html dynamically-generated


【解决方案1】:

好吧,我可以向您推荐一个用于模板的库插件。

但我很确定它可以通过几行代码来完成(穷人的模板引擎(crockford):

if (!String.prototype.supplant) {
    String.prototype.supplant = function (o) {
        return this.replace(/{([^{}]*)}/g,
            function (a, b) {
                var r = o[b];
                return typeof r === 'string' || typeof r === 'number' ? r : a;
            }
        );
    };
}

那么它将如何工作:

这将是您的结构:(从技术上讲,您可以(并且应该)将其放在文本/模板部分下)

var t= '&lt;tr data-symbol="{Symbol}"&gt;&lt;td&gt;{Symbol}&lt;/td&gt;&lt;td&gt;{Price}&lt;/td&gt;&lt;td&gt;{DayOpen}&lt;/td&gt;&lt;/tr&gt;';

这是绑定部分:

t.supplant({Symbol:'s',Price:2,DayOpen:3})

live example

【讨论】:

    【解决方案2】:

    这就是使用 Jquery 的方式

    var $ul = $('<ul></ul>');
    for (i = 0; i < someTimes; i++) {
        $ul.appent("<li>some text <div id='button" + i + "'></div></li>");
    }
    $('#myDiv').append($ul);
    

    【讨论】:

    • 对于像我这样的初学者,我真的很喜欢这种方法,但是在您的代码之后,我想写下另一个循环,在其中生成实际按钮并将其附加到您生成的 div 上环形。所以,我动态生成按钮(每次迭代都像这样:stackoverflow.com/questions/19072478/…),然后生成一个 var tempID = '#button' + i;然后(每次迭代结束)我正在做 $(tempID).append($aButton);但这不起作用。
    • 您应该发布您的代码,或者更好地制作一个小提琴 (jsfiddle.net),因为通常您提出的解决方案应该可以工作
    【解决方案3】:

    您可以在JQuery 中使用appendTo。语法是:

    $(content).appendTo(selector)
    

    jquery docs页面上的例子是:

    <h2>Greetings</h2>
    <div class="container">
      <div class="inner">Hello</div>
      <div class="inner">Goodbye</div>
    </div>
    
    $( "<p>Test</p>" ).appendTo( ".inner" );
    

    编辑:基于评论..

    <div class="placeholder"></div>
    
    $( "your generated html" ).appendTo($(".placeholder"));
    

    【讨论】:

    • 我想说的是,具有“内部”类的 div 将即时生成。所以,不,这真的不适合我。那是我的想法:使用 div 生成 html,然后使用 document.getElementById('container').innerHTML = html;在那部分之后,当 div 准备好时,我将附加到“内部”。有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多