我在一个可以接收多个HTML
片段的项目中工作,每个片段可以从不同的用户发送,实际上一些片段可能包含相同的 id 名称或CSS
类名,如何管理重复的名称,并将它们定位在JS
or PHP
DOM
?
问问题
127 次
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 回答