Skip to content


JS 的nextSibling属性(The built-in Javascript property nextSibling)

今天做项目的时候遇到一个变态的问题,CKEditor 嵌入ROR 的时候出现了 一个回车产生2个br 标签的问题(2个回车产生4个br……),使段落之前的间距变大一倍。
CKeditor本身应该没有问题,为解决此问题,想了一个笨方法: 用JS的nextSibling 属性来查找是否有相邻的2个或者以上的br,有的话直接remove。 (用的是jQuery)。
初始代码:

var brs = $('.format_markdown_text br').size();
var fbr = $('.format_markdown_text br');
for(i=brs-1;i>=0;i--){
if(fbr[i].nextSibling.nodeName == "BR"){
$(fbr[i]).remove();
}
}

发现只取到部分的br,查资料发现,firefox、opera、safari会把诸如空格换行之类的排版元素视作节点读取,所以在这些浏览器下只读取了部分br。

改进的代码:

var brs = $('.format_markdown_text br').size();
var fbr = $('.format_markdown_text br');
for(i=brs-1;i>=0;i--){
if(fbr[i].nextSibling.nodeName == "BR" || ($(fbr[i].nextSibling).val().match(/^[\s\r\n]*$/) && fbr[i].nextSibling.nextSibling && fbr[i].nextSibling.nextSibling.nodeName == 'BR')){
$(fbr[i]).remove();
}
}

这样就圆满解决了 空格(或者多个)、回车等产生的问题。

Posted in 前端开发.

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.