gpt4 book ai didi

jquery - 如何截断字符串(包含路径)而不触及文件名?

转载 作者:行者123 更新时间:2023-12-01 00:07:11 27 4
gpt4 key购买 nike

如何截断字符串(包含路径)而不触及文件名(保留最后一个文件夹、文件名和驱动器号)?

嗨,我正在寻找一种截断路径以适合指定宽度的方法。

我已经搜索过,我发现了这个: Truncate a string nicely to fit within a given pixel width

但它在字符串末尾添加...。我想要一个类似的功能,但它需要保留开头和结尾..

例如,我有这个路径(字符串):

H:\Informatique\Personnalisation\Icones\__\Crystal GT PNG Pack\Applications\licq.png

它需要适合 div 的宽度,如下所示:

H:\Informatique\...PNG Pack\Applications\licq.png

另一个例子:

D:\A___VERY___________LONG________PATH____________\myfile.png

将缩短为:

D:\A___VERY___________LONG________PA...\myfile.png

最后一个例子:

D:\A___VERY___________LONG________PATH____________\and-a-sub-solder\myfile.png

将缩短为:

D:\A___VERY________...\and-a-sub-solder\myfile.png

限制:

  • 需要驱动部分(H:)
  • 文件名和扩展名是必需的 (licq.png)
  • 如果有多个文件夹,则最后一个文件夹不得被截断,除非所有内容都已被截断并且这是截断的唯一方法让字符串变短。
  • 如果文件名太长,请将其从中间截断。

长文件名示例:

D:\my____file___________________________name____is___too____________long.png

将缩短为:

D:\my____file_________..._is___too____________long.png

我看到Windows和Apple以很好的方式做到这一点...但我找不到任何接近的脚本。

是否有类似脚本的链接,以便我可以尝试调整它?或者有人愿意帮助我吗? :)

非常感谢

最佳答案

这是一个有趣的问题,这是我的解决方案:http://jsfiddle.net/AlienHoboken/y7SgA/

它假设您有一个包含路径的变量 str,以及包含最大字符长度的 maxLength。

您需要稍微更改代码,因为 str 是硬编码的,您需要更改 maxLength,并且您还需要更改写入信息的位置(它现在只写入正文)。

注意:如果您的驱动器名称+文件名超过 maxLength 变量,它只会将这两个一起打印出来,即使它们太大。

代码,以防你不喜欢 jsfiddle:

$(document).ready(function () {
var str = "H:\\Informatique\\Personnalisation\\Icones\\__\\Crystal GT PNG Pack\\Applications\\licq.png";
var maxLength = 25;

var tokens = str.split("\\");
var drive = tokens[0];
var fileName = tokens[tokens.length - 1];
var len = drive.length + fileName.length;
//remove the current lenth and also space for 3 dots and 2 slashes
var remLen = maxLength - len - 5;

//if remLen < 0, then it will over flow our maxLength to still maintain drive and filename
if (remLen > 0) {
//remove first and last elements from the array
tokens.splice(0, 1);
tokens.splice(tokens.length - 1, 1);
//recreate our path
var path = tokens.join("\\");
//handle the case of an odd length
var lenA = Math.ceil(remLen / 2);
var lenB = Math.floor(remLen / 2);
//rebuild the path from beginning and end
var pathA = path.substring(0, lenA);
var pathB = path.substring(path.length - lenB);
path = drive + "\\" + pathA + "..." + pathB + "\\" + fileName;

//write it out
$("body").html("Orig. Path: " + str + "<br /><br />" +
"New Path: " + path + "<br /><br />" +
"MaxLength: " + maxLength + "<br /><br />" +
"New Length: " + path.length);
} else {

//try and fit our maxlength by taking only drive and filename
$("body").html("Orig. Path: " + str + "<br /><br />" +
"New Path: " + drive + "\\" + fileName + "<br /><br />" +
"MaxLength: " + maxLength + "<br /><br />" +
"New Length: " + (len + 1) + "<br /><br />");
}
});

关于jquery - 如何截断字符串(包含路径)而不触及文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308792/

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