我有一个基于tinymce的文档,我需要进行查找/替换。
文档中的标记将在html中包含特定的<!--nextpage-->
注释标记,如下所示:
<p>some content</p><!--nextpage-->
<p>some more content</p><!--nextpage-->
我需要执行脚本化的查找/替换,迭代标记中每次出现<!--nextpage-->
并用锚元素替换它。
锚点需要具有“anchor + N”的顺序id值,其中N
是文档中锚点的索引加1。
因此,对于上述文本,替换将产生:
<p>some content</p><a id="anchor1"></a>
<p>some more content</p><a id="anchor2"></a>
jQuery可以这样做,还是我需要使用像regex这样的其他东西?
答案 0 :(得分:4)
你可以获得innerHTML
的{{1}}并对其进行替换,在完成后再写回新文本。
DEMO - 1 - 使用JavaScript替换HTML
虽然代码有效,但替换HTML会产生影响。如果您有任何绑定到body
内任何元素的事件,那么当您替换HTML时,它们将被解除绑定。
如果可能的话,如果你对它有任何影响我不会使用body
作为占位符,但可能是一个可以用选择器定位的空元素,例如像<!--nextpage-->
那样。
通过这种方式,您可以仅定位和替换特定元素,而不会影响其余代码。
DEMO - 2 - 使用jQuery替换元素
另一种方法是将类分配给实际的<div class="nextpage-placeholder"></div>
标记,只需使用jQuery p
添加锚点。
DEMO - 3 - 使用jQuery附加新锚点
DEMO - 1
after
<p>some content</p><!--nextpage-->
<p>some more content</p><!--nextpage-->
DEMO - 2
var text = document.body.innerHTML;
var targetText = "<!--nextpage-->";
var index = 1;
while(text.indexOf(targetText) > -1){
text = text.replace(targetText, '<a id="anchor' + index + '"></a>');
index++;
}
document.body.innerHTML = text;
<p>some content</p><div class="nextpage-placeholder"></div>
<p>some more content</p><div class="nextpage-placeholder"></div>
DEMO - 3
var $elements = $(".nextpage-placeholder");
$elements.each(function(index){
$(this).replaceWith('<a id="anchor' + (index+1) + '"></a>')
});
<p class="nextpage-placeholder">some content</p>
<p class="nextpage-placeholder">some more content</p>