gpt4 book ai didi

html - 如何保留包含在 HTML
 标签中的文本的空白缩进,不包括文档中 
 标签的当前缩进级别?

转载 作者:技术小花猫 更新时间:2023-10-29 11:36:19 27 4
gpt4 key购买 nike

我试图在网站上显示我的代码,但在正确保留空格缩进时遇到问题。

例如给定以下片段:

<html>
<body>
Here is my code:
<pre>
def some_funtion
return 'Hello, World!'
end
</pre>
<body>
</html>

这在浏览器中显示为:

Here is my code:

def some_funtion
return 'Hello, World!'
end

当我希望它显示为:

Here is my code:

def some_funtion
return 'Hello, World!'
end

不同之处在于 HTML pre 标记的当前缩进级别被添加到代码的缩进中。我正在使用 nanoc 作为静态网站生成器,我正在使用 google prettify 来添加语法突出显示。

有人可以提供任何建议吗?

最佳答案

PRE 旨在完全保留空白(除非被 CSS 中的 white-space 更改,它没有足够的灵 active 来支持格式化代码)。

之前

格式被保留,但 PRE 标签之外的所有缩进也被保留。如果能保留以标记位置为起点的空白,那就太好了。

enter image description here

之后

内容的格式仍然与声明的一样,但是由于 PRE 标记在文档中的位置导致的多余前导空格已被删除。

enter image description here

我想出了以下插件来解决由于文档大纲缩进而导致的想要删除多余空格的问题。此代码使用 PRE 标记内的第一行来确定纯粹由于文档缩进而缩进了多少。

此代码适用于 IE7、IE8、IE9、Firefox 和 Chrome。我用 Prettify 对它进行了简单测试库将保留的格式与 pretty-print 相结合。确保 PRE 中的第一行实际上代表了您想要忽略的缩进基准级别(或者,您可以修改插件以使其更智能)。

这是粗略的代码。如果您发现错误或无法按您想要的方式工作,请修复/评论;不要只是投反对票。我编写这段代码是为了解决我遇到的问题,我正在积极使用它,所以我希望它尽可能可靠!

/*!
*** prettyPre ***/

(function( $ ) {

$.fn.prettyPre = function( method ) {

var defaults = {
ignoreExpression: /\s/ // what should be ignored?
};

var methods = {
init: function( options ) {
this.each( function() {
var context = $.extend( {}, defaults, options );
var $obj = $( this );
var usingInnerText = true;
var text = $obj.get( 0 ).innerText;

// some browsers support innerText...some don't...some ONLY work with innerText.
if ( typeof text == "undefined" ) {
text = $obj.html();
usingInnerText = false;
}

// use the first line as a baseline for how many unwanted leading whitespace characters are present
var superfluousSpaceCount = 0;
var currentChar = text.substring( 0, 1 );

while ( context.ignoreExpression.test( currentChar ) ) {
currentChar = text.substring( ++superfluousSpaceCount, superfluousSpaceCount + 1 );
}

// split
var parts = text.split( "\n" );
var reformattedText = "";

// reconstruct
var length = parts.length;
for ( var i = 0; i < length; i++ ) {
// cleanup, and don't append a trailing newline if we are on the last line
reformattedText += parts[i].substring( superfluousSpaceCount ) + ( i == length - 1 ? "" : "\n" );
}

// modify original
if ( usingInnerText ) {
$obj.get( 0 ).innerText = reformattedText;
}
else {
// This does not appear to execute code in any browser but the onus is on the developer to not
// put raw input from a user anywhere on a page, even if it doesn't execute!
$obj.html( reformattedText );
}
} );
}
}

if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ) );
}
else if ( typeof method === "object" || !method ) {
return methods.init.apply( this, arguments );
}
else {
$.error( "Method " + method + " does not exist on jQuery.prettyPre." );
}
}
} )( jQuery );

然后可以使用标准的 jQuery 选择器应用此插件:

<script>
$( function() { $("PRE").prettyPre(); } );
</script>

关于html - 如何保留包含在 HTML <pre> 标签中的文本的空白缩进,不包括文档中 <pre> 标签的当前缩进级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com