将div元素中多个实例上的数字替换为另一个数字

时间:2018-02-21 16:56:44

标签: javascript jquery html regex

如您所见,我的HTML包含对' 0'的多个引用。我需要将这些更改为' 1'。

但是,我的jQuery还没有工作。



jQuery(".create-new-location").click(function() {
 jQuery("#header-logo").html().replace(/\[0\]/g, '['+(1)+']');
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="header-logo" class="header-title location-header-0 title-edit-header" data-row-id="location-header-0" title="Location name (for your reference)">
        <div class="input-selection title-edit-header">
          <div class="text-input">
              <input class="option_textbox col-sm-12 change-width title-edit" placeholder="Location name (for your reference)" value="" type="text" name="bp_theme_options[social][map][locations][0][location_name]">
          </div>
        </div>
        <div class="open-block pencil-edit" data-row-id="location-header-0"></div>
    </div>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:3)

你必须像这样设置html

jQuery(".create-new-location").click(function() {
    var the_html = jQuery("#header-logo").html().replace(/\[0\]/g, '['+(1)+']');
    jQuery("#header-logo").html(the_html);
});

但这不是一个好习惯!!

如果您只需要更改<input>的属性,为什么要更改整个#header-logo,对吧?当您重新绘制这样的html时,冒险会丢失事件处理程序绑定到刚刚重新绘制的元素。

jQuery(".create-new-location").click(function() {
    var elements = jQuery("#header-logo").find('input[name]'); /*all input with name*/
    elements.each(function(el){
        var the_name = el.attr('name').replace(/\[0\]/g, '['+(1)+']');
        el.attr('name', the_name);
    });
});

答案 1 :(得分:1)

重新制作html是never a good idea

  

如您所见,我的HTML包含对&#39; 0&#39;的多个引用。我需要将这些更改为&#39; 1&#39;。

您使用的方法,甚至是此处接受的答案,都不会修改包含其中几个引用的id="header-logo"的包含div。此外,在验证案例中简单地用新复制的dom元素替换现有的dom元素存在很多问题(例如,这可能会破坏您的验证)。

您应该使用的方法是专门针对包含这些引用的属性,然后仅修改它们。这是一种通用方法,它查看所有属性并将[0(0是之前的值)的出现修改为[1(1为after的值)以及修改{的出现次数{1}}(在= 0之前)到-0(在= 1之后)。

这将阻止从元素中删除任何现有的事件处理程序,以及与regexing直接html相关联的许多其他问题,然后用该结果替换dom元素。

&#13;
&#13;
-1
&#13;
$.fn.indexUpdate = function(before,after){
 $("*",this).add(this).each(function(){
  $(this.attributes).each(function(){
      this.value = this.value.replace(new RegExp('\\b\\-'+before+'\\b','g'), '-'+after);
      this.value = this.value.replace(new RegExp('\\['+before, 'g'), '['+after);
  });
 });
};

$("#header-logo").indexUpdate(0,1);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

此语句jQuery("#header-logo").html().replace(/\[0\]/g, '['+(1)+']');检索id为header-logo的元素内的html,并将html字符串中的每个0替换为1 但它没有' t再次将修改后的字符串分配给元素因此您可能需要使用以下代码。

jQuery("#header-logo").html(jQuery("#header-logo").html().replace(/\[0\]/g, '['+(1)+']'));

答案 3 :(得分:0)

试试这个:它将取代所有存在的&#39; 0&#39;用&#39; ##&#39;

$(".create-new-location").click(function() {
   $("#header-logo").html().replace(/0/gi, '##')
});