解决SyntaxHighlighter换行问题
因为用的百度编辑器自带的缘故,代码高亮插件选用了SyntaxHighlighter。
但是这货有个蛋疼的问题就是长一些的代码不能自己换行,会出滚动条。
于是网上找了个“解决方法”:把默认的不换行样式去掉,或覆盖成默认:
.syntaxhighlighter .line {
/*white-space: pre !important; 注释掉,或者外部覆盖掉 */
}烦人的横向滚动条没有了,但是,看起来还是怪怪的。就像这样,这是从贼寇同学站上截的图,求不打:

竟然和行号没对齐!
显然还需要额外再用JS处理一下。正巧,百度编辑器里已经有了解决代码,不要问我为啥不全用jQuery来操作DOM:
$('.syntaxhighlighter').each(function(index,me){
var tds = me.getElementsByTagName('td');
for(var i=0,li,ri;li=tds[0].childNodes[i];i++){
ri = tds[1].firstChild.childNodes[i];
ri.style.height = li.style.height = ri.offsetHeight + 'px';
}
});需要特别注意的是,需要在SyntaxHighlighter渲染过后执行这段代码。于是,我们需要给渲染方法加一个回调参数。在shCore.js中找到all方法,添加一个callback的参数:
all: function(params, callback)
{
attachEvent(
window,
'load',
function() { sh.highlight(params); callback(); }
);
}网上也有不改插件源码的方法,就用setTimeout去监听是否完成全部渲染,也是可以的。不再赘述。
页面调用的时候这样就好:
jQuery(function(){
if(!window.SyntaxHighlighter) return;
var comepete = function(){
$('.syntaxhighlighter').each(function(index,me){
var tds = me.getElementsByTagName('td');
for(var i=0,li,ri;li=tds[0].childNodes[i];i++){
ri = tds[1].firstChild.childNodes[i];
ri.style.height = li.style.height = ri.offsetHeight + 'px';
}
});
}
SyntaxHighlighter.all({},comepete);
});然后大家看到的代码高亮就正常了。