首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果文本具有编码字符,则删除span标记问题

如果文本具有编码字符,则删除span标记问题
EN

Stack Overflow用户
提问于 2018-01-19 09:31:54
回答 1查看 131关注 0票数 1

我希望在浏览器编辑器中删除对文本块进行换行的span标记,但如果文本包含任何类型的特殊字符(如换行符\n)或编码字符(如0、·等),则会遇到问题。

下面是我的代码,它可以处理没有编码字符的句子

代码语言:javascript
复制
function fnIgnoreThisErr(evtTargID){    
    // use the passed parameter 
    var errIdx = evtTargID.substr(evtTargID.indexOf('err-') + 4);  
    // buld span tag for finding
    var errSpan = "span.err-" + evtTargID;
    // declare the editor
    var editor = CKEDITOR.instances.editor1;
    // get text from the editor
    var edata = editor.getData();  
    // find the specific span in the text
    var spanData = $( edata ).find(errSpan); 
    // get outerHTML and innerText to use for replacement
    var myCurrText = spanData[0].outerHTML;
    var myNewText = spanData[0].innerHTML;
    // standard js replace works if no special chars
    var replace_text = edata.replace(myCurrText, myNewText);  //
    // sets the data back in CKEditor
    editor.setData(replace_text);
}

以下是带有span标记myCurrText的文本的示例:

代码语言:javascript
复制
<span class=\"vts-warn vts-ParseFailure err-2\">Approval of ICA<br />\n&nbsp; GAMA requested further clarification of proposed &sect;&sect;25.1739 (now &sect;25.1729) and 25.1805(b) (now &sect;26.11(b)) requirements that ICA prepared in accordance with paragraph H.</span>

并且去除了跨度标签。

代码语言:javascript
复制
Approval of ICA<br />\n&nbsp; GAMA requested further clarification of proposed &sect;&sect;25.1739 (now &sect;25.1729) and 25.1805(b) (now &sect;26.11(b)) requirements that ICA prepared in accordance with paragraph H.

它在没有任何编码字符的普通句子上工作得很好。我可以切换到jQuery,但也不能让replaceWith工作。

这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-01-22 23:55:16

我想通了。在html实体和浏览器和我的JS呈现/解释它们的方式之间似乎存在差异。

即跨度的outerHTML不是edata中的文本的字符对字符匹配。

所以我只得到了跨度开始的indexOf值和跨度节点的长度。但是,由于上述差异,此长度可能包括其他字符。因此,接下来,我将找到'‘标记的确切位置。在此基础上,我构建了一个字符串变量,该变量与需要替换的文本完全匹配。

这是我的最终代码。(为了清楚起见,我保留了很长的格式)

代码语言:javascript
复制
function fnIgnoreThisErr(evtTargID){    
    // use the passed parameter 
    var errIdx = evtTargID.substr(evtTargID.indexOf('err-') + 4);  
    // buld span tag for finding
    var errSpan = "span.err-" + evtTargID;
    // declare the editor
    var editor = CKEDITOR.instances.editor1;
    // get text from the editor
    var edata = editor.getData();  
    // find the specific span in the text
    var spanData = $( edata ).find(errSpan); 
    // extract the span class name
    var spanTag = '<span class="'+spanData[0].className+'">'
    // find indexOf value for the span opening tag
    var spanPos = edata.indexOf(spanTag);
    // get the initial length of the span.
    var spanLength = spanData[0].outerHTML.length;
    // get the actual text from that span length.
    var spanString = edata.substring(spanPos,spanPos+spanLength);
    // find the acutal position of the span closing tag
    var spanClose = spanString.indexOf('</span>');
    var spanTagClosePos = spanClose+7;
    // extract the true text comprising the span tag
    var spanStringMod = edata.substring(spanPos,spanPos+spanTagClosePos);
    var spanInnerHtm = spanData[0].innerHTML;
    log("errSpan: "+ errSpan);
    log("errSpanClass: "+ errSpanClass);
    log("spanData: "+  JSON.stringify(spanData));
    log("spanPos: "+ spanPos);
    log("spanTagClosePos: "+ spanTagClosePos);
    log("spanStringMod: "+ spanStringMod);
    log("spanInnerHtm: "+ spanInnerHtm);
    var newEdata = edata.replace(spanStringMod, spanInnerHtm);  
    log(" newEdata: "+ newEdata);   
    // update the editor
    editor.setData(newEdata);
}

我希望这对某个人、某个地方、某个时间有帮助!

干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48332878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档