替换部分ID

时间:2013-07-11 13:26:49

标签: jquery string replace

我在尝试使用特定类替换页面上所有元素的ID的特定部分时遇到问题。当页面加载时(来自数据库)动态生成id,因此我无法对需要替换的值进行硬编码。

例如,我会有这样的事情:

<div id="BUL_123" class="commentary_list_item newItem">
  <span id="commentary_list_text_123" class="removableItem newItem">
    <img id="added_cancelIcon_123" class="cancelIcon newItem" src="delete_icon.gif">
  </span>
</div>

我想用其他ID替换所有“123”,但保留“BUL_”,“commentary_list_text_”,“added_cancelIcon_”部分。

我可以通过分割功能获得123值,但我不确定如何在我的页面上替换它们。

任何帮助将不胜感激。谢谢!

解决方案:

function ReplaceIDNumber(data, id) {

 jQuery('.newItem').each(function() {

    var id = jQuery(this).attr('id');
    var id_split = el_id.split('_');

    newID = id.replace(id_split[id_split.length - 1], data);
    jQuery(this).attr('id', newID);
});

(“数据”来自我制作的指向此函数的ajax调用)

感谢所有帮助,并对问题含糊不清感到抱歉

3 个答案:

答案 0 :(得分:2)

您可以使用attr / prop的回调函数和replace方法:

$('#wrapper [id$="123"]').attr('id', function(_, currentID) {
   return currentID.replace('123', '321');
});

http://jsfiddle.net/PZ9vB/

答案 1 :(得分:0)

如果没有更好的问题定义,你可以用这个正则表达式替换id的数字部分:

var str = "BUL_123";
str.replace(/\d+/,"foo");

这会将123替换为foo(替换您要替换的任何内容)。只要前缀部分不包含数字,这就可以工作。如果是这种情况,那么你需要更有创意。

答案 2 :(得分:0)

一些好的答案,但他们都假设 - 所以更多的信息会有所帮助。我假设:(1)最后一部分(由“_”分隔)是需要替换的部分(2)最后一部分并不总是123

$(document).ready(function() {
  // all id
  var $allIds = $('[id]');
  var $this;
  var id;
  var idArray;
  var idArrayLength;
  var newId;

  $allIds.each(function() {
    $this = $(this);
    id = $this.attr('id');
    idArray = id.split("_");
    idArrayLength = idArray.length;
    newId = id.replace(idArray[idArrayLength-1], "abc");
    $this.attr('id', newId);
  })
})