gpt4 book ai didi

javascript - 如何重复 n 次短语或单个字符以填充容器宽度?

转载 作者:行者123 更新时间:2023-11-28 01:17:11 26 4
gpt4 key购买 nike

在具有固定宽度(例如 300 像素)的父 div 的 html 页面上。作为它的 child ,我得到了多个 div 容器,每个容器都包含一个 anchor 。所以,结构是这样的:

<div class="tsstatus">
<div class="tsstatusItem tsstatusServer">
<!-- [...] -->
<div class="tsstatusItem">
<a href="#">
<img src="image.png">Upload/Download
<div class="tsstatusFlags">
<img src="image.png">
</div>
</a>
<!-- -->
</div>
</div>
<!-- [...] -->
<div class="tsstatusItem *spacer">
<a href="#" title="Wau [43]">
<img src="image.png" alt="image.png">Wau
<div class="tsstatusFlags">
</div>
</a>
</div>
</div>

它的CSS:

.tsstatus, .tsstatuserror {
background-color: #ffffff;
width: 300px;
}

.tsstatus, .tsstatus *, .tsstatuserror {
color: #000000;
font-family: Verdana, sans-serif;
font-size: 10px;
}

.tsstatus label {
border-bottom: 1px solid #aaaaaa;
}

.tsstatusItem a {
color: #000000;
}

.tsstatusItem a:hover {
background-color: #f6f6f6;
color: #000099;
}

.tsstatuserror {
color: #ff0000;
}

.tsstatus, .tsstatus * {
vertical-align: middle;
margin: 0;
padding: 0;
}

.tsstatus {
position: relative;
overflow: hidden;
}

.tsstatus label {
display: block;
padding: 2px 0;
}

.tsstatusItem {
margin-left: 16px;
position: relative;
white-space:nowrap;
text-align: left;
}

.tsstatusItem a {
display: block;
text-decoration: none;
}

.tsstatusItem img {
border: 0;
vertical-align: middle;
margin-right: 2px;
}

.tsstatusFlags {
position: absolute;
right: 0;
top: 0;
}

.tsstatusServer {
margin-left: 0;
}

.tsstatusItem.cspacer {
text-align: center;
}

.tsstatusItem.rspacer {
text-align: right;
}

.tsstatusItem.lspacer {
text-align: left;
}

我想重复 anchor 内的字符以填充父级宽度。因此,在这种情况下,重复“短语”直到达到 300px。

我试着用 JavaScript/jQuery 来做:

$(document).ready(function() {
var $elem;
var iFontSize = 0;
var iFullWidth = 0;
var iIterations = 0;
var sText = "";
$(".item.repeat").each(
function(index, value) {
$elem = $(value).find("a").first();
$elem.text($elem.text().trim());
iFontSize = $elem.css("font-size");
iFontSize = parseInt(iFontSize.substr(0, iFontSize.indexOf("px")));
iFullWidth = $(value).innerWidth();
// 1st Method
//iIterations = parseInt(iFullWidth / (iFontSize * $elem.text().length));
// 2nd Method
iIterations = parseInt(iFullWidth / $elem.innerWidth());
for (var i = 0; i < iIterations; i++) {
sText += $elem.text();
}
$elem.text(sText);
}
);
});

第一种或第二种方法都不适合我。此外,由于某些奇怪的原因,$(value).width() 不是 300px 的异常(exception)值。相反,我认为它是窗口宽度,因为它大约是 1904 像素。

另外,我的第一个方法假设有一个单 Angular 字体。可能不是浏览器默认字体的最佳方式。

最佳答案

下面的代码应该做你想做的:

<!DOCTYPE html>
<html lang="en">

<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$().ready(function() {
// Process items to be repeated
$('.item.repeat a').each(function() {
var $this = $(this);

var text = $this.text();

// Remove these comments if spaces are needed
/*text += ' ';
$this.html($this.text()+'&nbsp;');*/

var width = $this.outerWidth();
var parentWidth = $this.parent('div').outerWidth();

var numReps = Math.floor(parentWidth / width);

$this.html(text.repeat(numReps));
});
});
</script>
</head>

<body>
<div class="wrapper" style="width:300px;">
<div class="item repeat">
<a href="#">phrase</a>
</div>
<div class="item">
<a href="#">phrase</a>
</div>
<div class="item repeat">
<a href="#">phrase</a>
</div>
</div>
</body>

</html>

如果短语之间需要空格,可以注释掉附加它们的部分。

关于javascript - 如何重复 n 次短语或单个字符以填充容器宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281926/

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