使用Javascript查找并替换数字

时间:2011-02-28 23:24:46

标签: javascript jquery

我有一段HTML使用jQuery反复重复(当用户点击'add'时会创建另一个块:

<p>
<label for="question[1][text]">Question: <span class="req">*</span></label>
<input name="question[1][text]" id="A_Question_1" value="" type="text" class="f_input" />
</p>

<p>
<label for="question[1][type]">Type: <span class="req">*</span></label>
<input name="question[1][type]" id="A_Type_1" type="text" class="f_input" />
</p>

对于该块的每次迭代,我需要将每个数字递增1,以便下一个块自动创建:

<p>
<label for="question[2][text]">Question: <span class="req">*</span></label>
<input name="question[2][text]" id="A_Question_1" value="" type="text" class="f_input" />
</p>

<p>
<label for="question[2][type]">Type: <span class="req">*</span></label>
<input name="question[2][type]" id="A_Type_1" type="text" class="f_input" />
</p>

我确信这很简单,但我对Regexs等经验不足以找出解决方法。谢谢:))

5 个答案:

答案 0 :(得分:2)

JQote为JQuery提供了一个HTML模板库。它使用包含其参数的对象调用。

<script type="text/html" id="template">
<![CDATA[
    <p>
        <label for="question[<%= this.iteration %>][text]">Question: <span class="req">*</span></label>
        <input name="question[<%= this.iteration %>][text]" id="A_Question_<%= this.iteration %>" value="" type="text" class="f_input" />
    </p>

    <p>
        <label for="question[<%= this.iteration %>][type]">Type: <span class="req">*</span></label>
        <input name="question[<%= this.iteration %>][type]" id="A_Type_<%= this.iteration %>" type="text" class="f_input" />
    </p>
]]>
</script>

然后作为add()功能的一部分:

<script type="text/javascript">
    var globalIteration = 0

    function add() {

      <...your code...> 

      globalIteration++;
      var obj= {
        iteration: globalIteration,
        <...any other variables to insert into template...>
      };  
      $('#template').jqote(obj).appendTo($('body'));
    }
</script>

答案 1 :(得分:1)

您可以将模板存储在一些带有占位符的隐藏div中(类似#id#) 然后,您可以用javascript中的实际ID替换占位符。像

这样的东西
var html = $('#template').html().replace('#id#', id);
list.append(html);

可以从当前的孩子数量计算下一个ID。

var id = list.children().length + 1;

答案 2 :(得分:0)

这样的事情应该有效:

$(document).ready(function() {
  $container = $('#container');
  $button = $('#button')
  .data('clicked', 0)
  .click(function() {
    var clicked = $button.data('clicked');
    $container.append('<p><label for="question[' + clicked + '][text]">Question: <span class="req">*</span></label><input name="question[' + clicked + '][text]" id="A_Question_' + clicked + '" value="" type="text" class="f_input" /></p>');
    $button.data('clicked', clicked + 1);
  });
});

答案 3 :(得分:0)

这取决于你如何绑定你的功能。如果你在javascript中绑定它我可能会使用该数字作为添加链接的假属性。

这样的东西
'<a href="javascript:;" question_number="1">Add</a>

在你的javascript中用$(this).attr('question_number')替换[1]并在最后添加$(this).attr('question_number',nextId)

更好的解决方案可能是将其添加到链接的id并在javascript完成时更改id,如果你通过id绑定则不是一个好的解决方案。

如果您使用类似

之类的内容直接在html中绑定onclick
<a href="javascript:;" onclick="my_func();">Add</a/>

修改你的函数以获取参数并更改类似于上面的javascript末尾的参数。我也喜欢安迪的解决方案。

答案 4 :(得分:0)

我是如何做到的http://pintum.com.au/goCruising/details.html#tabs-2 单击“添加”按钮。

它使用jQuery,jtemplates插件和JSON。只需查看其工作原理的来源。