Javascript 替换CMS格式化内容中的标记

Javascript 替换CMS格式化内容中的标记,javascript,Javascript,我正在处理一个CMS格式的文本块像这样 Lorem ipsum dolor sit amet,Concertetur Adipising elit.Vivamus lacus ipsum,semper non consequat eu,facilisis at 莱克托斯。前庭和大前庭 康格奥奇。亨德雷里图皮斯的苏西比特·埃利芬德·多洛(Vivamus suscipit eleifend dolor) 我的心,我的心,我的心,我的心,我的心,我的心 阿梅特·奥纳雷·勒姆·坦普斯。丘脑同侧 帕特。马

我正在处理一个CMS格式的文本块像这样

Lorem ipsum dolor sit amet,Concertetur Adipising elit.Vivamus lacus ipsum,semper non consequat eu,facilisis at 莱克托斯。前庭和大前庭 康格奥奇。亨德雷里图皮斯的苏西比特·埃利芬德·多洛(Vivamus suscipit eleifend dolor) 我的心,我的心,我的心,我的心,我的心,我的心 阿梅特·奥纳雷·勒姆·坦普斯。丘脑同侧 帕特。马来苏达梅特斯威尼斯悬液 卡苏斯·埃吉特。多奈克·洛雷姆·里苏斯·马莱苏阿达·康格 维尔努克

双线返回用于开始新段落。我无法更改CMS输出

由于文本块周围已经有一个开始和结束,我需要首先切换结束标记和开始标记的双线返回标记。像这样:=

然后我需要去掉剩下的标签,并替换为一个空格:=

我试过这个

$('#nomorefonts').submit(function () {
    $('br').replaceWith(function () {
        return $('</p><p>').append($(this).contents());
    });
    return false;
});
但它用几个开始和结束标记替换每个标记

编辑:所需结果如下:

Lorem ipsum dolor sit amet,是一位杰出的献身者。维瓦摩斯 同侧腔隙,非同侧腔隙,侧腔隙。前庭 这是一个巨大的挑战。维瓦摩斯 suscipit eleifend dolor,位于犹他州的亨德雷特turpis bibendum。

Morbi 奥古斯和尼尔斯·乌兰科珀之间有一段时间的时间。酒后驾车 nec nisi quis ipsum pulvinar VOLVIAR PAT。马勒苏阿达威尼斯人悬钩子 梅特斯,nec pretium dui cursus eget。Donec vitae lorem vitae risus 马莱苏阿达康格维尔努克大教堂(dapibus malesuada congue vel nunc)

您试图使用$to,但它不是元素

整个方法似乎有问题,但最好的办法是操纵原始字符串:

$('.block-of-text').html($('.block-of-text').html().replace(/<br>/g, '</p><p>'));

我想你最好还是做点这样的事情:

$('#target_container p').each(function(){
    var pThis = $(this);
    var pRaw = pThis.html().split('<br>').join('</p><p>');
    pThis.html(pRaw);
});
var newHtml = "";
var splitHtml = $("p").html().split("<br>");
for (var i=0; i < splitHtml.length; i++) {
   newHtml += "</p><p>" + splitHtml[i];
}
$("#yourdiv").html(newHtml);
“target_container”正是您想要开始查找p元素实例的地方。替换为适合你的

更好的办法是,修补CMS。

类似以下内容:

$('#target_container p').each(function(){
    var pThis = $(this);
    var pRaw = pThis.html().split('<br>').join('</p><p>');
    pThis.html(pRaw);
});
var newHtml = "";
var splitHtml = $("p").html().split("<br>");
for (var i=0; i < splitHtml.length; i++) {
   newHtml += "</p><p>" + splitHtml[i];
}
$("#yourdiv").html(newHtml);
你试过了吗?比如:

$('#nomorefonts').submit(function(){
    var elem=$('#text_box'),formattedStr=elem.html().replace(/<br><br>/g,'</p><p>').replace(/<br>/g,' ');
    elem.html(formattedStr);
    return false;
});

请注意,您提议的操作在语义上是不明确的。你不知道两次回车键是否真的是一个新段落,除非这是一种定义良好的标记语言,比如Markdown……但是如果是这样,你就不会有这个问题。我会的。使用此CMS的公司已经制定了标准做法,使用SHIFT+Enter x 2来表示段落分隔符,使用单个SHIFT+Enter作为换行符。在这里找到了解决方案:我建议使用函数形式:.htmlfunctioni,oldVal{return oldVal.replace…}参见Yea,good call。这样,您就可以一次更新所有的.block文本,而不需要使用each或循环。文本块'.html$'.block of text'.html.replace//g',

';但是,如果文本位于每个标记之前,则在它自己的段落中封装每一行。有关所需结果,请参见上面的“我的编辑”。这更接近期望的结果,但它添加了一个空段落:$'V01-CNTNTXT'.html$'V01-CNTNTXT'.html.replace//,'

';$'V01-CNTNTXT'.html$'V01-CNTNTXT'.html.replace//g';尝试此操作后,我得到未捕获的引用错误$未定义。div容器ID是G02,我有$'G02 p'。每个函数{虽然它基本上是开箱即用的,但我用replaceWith替换了.html,这似乎效果更好,因为我们修改了对象的内容。Fiddle: