国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开封县| 宜兰市| 铜陵市| 临夏县| 民勤县| 高要市| 淮北市| 合水县| 多伦县| 临邑县| 潼南县| 义马市| 盐城市| 铜梁县| 竹山县| 湘潭县| 平江县| 泗水县| 临泉县| 顺义区| 巴青县| 胶南市| 喀喇沁旗| 黑河市| 巴青县| 富川| 侯马市| 宣威市| 湟源县| 玛曲县| 阿克陶县| 同江市| 和政县| 华蓥市| 南康市| 行唐县| 莱西市| 临泉县| 汤阴县| 兰溪市| 百色市|