国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

JQuery搞定SyntaxHighlighter v3.x長代碼自動換行 行號錯亂問題

2024-04-25 20:30:25
字體:
來源:轉載
供稿:網友

長代碼換行是SyntaxHighlighter3.0版本之前的功能,但3.0之后就木了,草草草草艸!本人認為主要猿因是gutter(代碼行號指示器)的換行難做。因為3.x版是將代碼行號和代碼部分分開生成HTML的,猿來的老版本是在一起的。這樣做是便于直接復制代碼,而不會復制到行號上去。

很多人都在想辦法讓它實現換行,但都卡在代碼行號的問題上。我關注這個問題已經差不多一年了,今天終于有了個比較漂亮的解決辦法。

首先,強制給代碼部分換行的CSS還是要寫的:

.syntaxhighlighter textarea { 后加入

white-space: pre-wrap !important;word-break: break-all;/* 如果是需要保留一行內的單詞完整性則需要把 break-all 改為 break-word  */

這段CSS換行的前提是,pre標簽的外邊一定要有一個固定寬度的容器對象。比如一個600px寬度的div就可以。

然后,我們需要一段JQuery,用來計算被換行的代碼顯示在頁面上的高度,然后賦值給它的行標。這段代碼是國外一個論壇上找的,但我測試的時候發現它有點小問題,我的環境是JQuery1.7+Firefox15,我順便做了一個修正,全部代碼如下:

$(function() {// Line wrap backvar shLineWrap = function() {$('.syntaxhighlighter').each(function() {// Fetchvar $sh = $(this),$gutter = $sh.find('td.gutter'),$code = $sh.find('td.code');// Cycle through lines$gutter.children('.line').each(function(i) {// Fetchvar $gutterLine = $(this),$codeLine = $code.find('.line:nth-child(' + (i + 1) + ')');//alert($gutterLine);// Fetch heightvar height = $codeLine.height() || 0;if (!height) {height = 'auto';} else {height = height += 'px';//alert(height);}// Copy height over$gutterLine.attr('style', 'height: ' + height + ' !important'); // fix by Edi, for JQuery 1.7+ under Firefox 15.0console.debug($gutterLine.height(), height, $gutterLine.text(), $codeLine);});});};// Line wrap back when syntax highlighter has done it's stuffvar shLineWrapWhenReady = function() {if ($('.syntaxhighlighter').length === 0) {setTimeout(shLineWrapWhenReady, 10);} else {shLineWrap();}};  // FireshLineWrapWhenReady();});

現在,行號的高度就能和代碼的高度保持一致了。

如果在CHROME和火狐瀏覽器下出現首行錯位問題,解決辦法如下:根本原因是與主CSS樣式的.container樣式沖突,如下位置是bootstrap的定義:

.clearfix::before, ...,.container::before, .container::after, ..., .modal-footer::before, .modal-footer::after {    content: " ";    display: table;}

 就是這個display: table;屬性導致的,重寫一個 syntaxhighlighter的container樣式覆蓋它就行了:

 .syntaxhighlighter td.code .container::before, .syntaxhighlighter td.code .container::after {display: none;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明光市| 凤山县| 三门县| 五河县| 松阳县| 滁州市| 陈巴尔虎旗| 曲阳县| 库伦旗| 馆陶县| 肃北| 家居| 湄潭县| 安阳县| 绥棱县| 和田县| 三台县| 确山县| 闻喜县| 壤塘县| 建阳市| 万山特区| 鄢陵县| 定安县| 肥乡县| 大石桥市| 肇庆市| 共和县| 天长市| 颍上县| 海林市| 孝昌县| 宾阳县| 新津县| 营山县| 华容县| 兴化市| 策勒县| 射阳县| 凌海市| 雅江县|