Дзен-трансгуманист,
Туть при данной постановке задачи - рекурсия не слабая -
Воть мой предыдущий код
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<div id=div></div>
<script type="text/javascript">
var str='\
<div>текст1\n\
<span>текст2\n\
{spec}\n\
</span>\n\
<p>текст3</p>\n\
<p>текст4</p>\n\
<p>текст5</p>\n\
<span>текст6\n\
{/spec}\n\
</span>\n\
текст7\n\
</div>';
alert(str)
function Replac(str) {
var a = document.getElementById( 'div' );
$(a).append(str);
var c=$(a).find("span").each(function() {
var b = $(this).html();//alert('b='+b)
if(b.indexOf('spec}')!=-1){ //alert(b)
b = b.replace(/\s*(\{\/?spec\})\s*/ig,' ');
$(this).text(b);
$(this).after('\n'+RegExp["$1"]);
alert($(a).html())
}
}); return $(a).html()}
alert(Replac(str))
</script>
Вынимал из span и переставлял за ним
А тут нужно смотреть оба тега - в одном ли теге - если нет то....
Вдобавок обёртка тегов <p> в теги <p> (в исходной строке) - некоректна - при любой перестановке - Dom нарушается <p - теги абзацев - они не могут перекрывать иные теги абзацов
А как получается при обрамлении <p> (а не div, как Выше
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<div id=div></div>
<script type="text/javascript">
var str='\
<p>текст1\n\
<span>текст2\n\
{spec}\n\
</span>\n\
<p>текст3</p>\n\
<p>текст4</p>\n\
<p>текст5</p>\n\
<span>текст6\n\
{/spec}\n\
</span>\n\
текст7\n\
</p>';
alert(str)
function Replac(str) {
var a = document.getElementById( 'div' );
$(a).append(str);
var c=$(a).find("span").each(function() {
var b = $(this).html();//alert('b='+b)
if(b.indexOf('spec}')!=-1){ //alert(b)
b = b.replace(/\s*(\{\/?spec\})\s*/ig,' ');
$(this).text(b);
$(this).after('\n'+RegExp["$1"]);
alert($(a).html())
}
}); return $(a).html()}
alert(Replac(str))
</script>
(Причём в Опере и Мозилле - траблы слегка разняться