0

我在一个可以接收多个HTML片段的项目中工作,每个片段可以从不同的用户发送,实际上一些片段可能包含相同的 id 名称或CSS类名,如何管理重复的名称,并将它们定位在JSor PHP DOM

4

2 回答 2

1

如果您可以将片段存储在 JavaScript(AJAX 或其他)中,那么您可以在页面上尝试此操作 - 它应该适用于任何设备并通过在将其添加到 DOM 之前使用随机数重命名它来修复任何重复的 ID

现场演示

 $(function() {
  var counter=0,prefix="renFrag",fragments = [
      $('<div id="id1">Fragment1</div>'),
      $('<div id="id2">Fragment2</div>'),
      $('<div id="id3">Fragment3</div>')
  ]  
  $.each(fragments,function() {
      var id = $(this).attr("id"); // the ID of the fragment
      if ($("#"+id).length>0) { // find if this ID is already in the DOM
    // rename the fragment. NOTE Date().getTime() was not random enough 
    // $(this).attr("id",id+'_'+Math.floor(Math.random() * 10000)); 
        $(this).attr("id",prefix+(counter++)); 
      }  
      $(this).appendTo("#container"); // add the fragment to the DOM
  });
  $("div").each(function() { // display the ID for debugging (remove when happy)
      $(this).append("-"+this.id); 
  });  
});

如果您需要访问新片段,请向其中添加固定字符串,将随机数更改为计数器并使用$("div[id^=renFrag]").whatever$("div[id=renFrag"+cnt+"]").whatever

如果您需要保留嵌入式脚本和 CSS,通常不推荐但您的情况很特殊的选项是将每个片段加载到其自己的 iFrame 中。请注意,在页面中或通过 iFrame 执行外部脚本存在安全风险。

于 2013-06-29T04:47:57.640 回答
-1

如果您知道要搜索的唯一 ID,则可以使用 PHP 中的 str_replace 轻松替换确切的字符串:

$html = str_replace(array('id="test1"', 'id="test2"'), array('id="new1"', 'id="new2"'), $html);

要在 PHP 中搜索和替换字符串中的 CSS 类名,可以使用 preg_replace。一个 HTML 节点上可能有多个类名,因此正则表达式可以更好地解析它。

于 2013-06-29T04:33:23.720 回答