固定された最大文字数を使用するのではなく、利用可能なすべての幅を使用する方が使いやすいでしょう。利用可能なすべての領域を使用するだけでなく、任意のフォントサイズまたはスタイルで動作するソリューションがあります。あなたはリストの項目にリンクや画像を置くことさえできます!
このテクニックは、リストをレンダリングし、DIVの右端を通過するエントリを削除します。
は、このHTMLを想定します。
<div id="theList" class="List" style="width:40ex">
<span class="Entry">this is a test</span>
<span class="Divider">|</span>
<span class="Entry">test</span>
<span class="Divider">|</span>
<span class="Entry">another string</span>
<span class="Divider">|</span>
<span class="Entry">abc</span>
<span class="Divider">|</span>
<span class="Entry">string test</span>
<span class="Divider">|</span> <!-- Extra divider, for the count. -->
<span class="Count">0</span> <!-- The count. -->
</div>
上記の "幅:40exは" わずかになるこのDIVを強制することです。それを必要な幅に置き換える必要があります。
は、このCSSスタイルを想定します
// This uses jQuery.
var listDiv = $("#theList");
var listWidth = listDiv.innerWidth();
var entries = listDiv.children(".Entry");
var firstLeft = entries.eq(0).offset().left;
var countSpan = listDiv.children(".Count");
var nHidden = 0;
var i;
var entry;
var needWidth;
for (i = entries.length; 0 <= --i; /**/) {
entry = entries.eq(i);
if (nHidden != 0) {
countSpan.text("+" + nHidden);
needWidth = countSpan.offset().left + countSpan.outerWidth()
} else {
needWidth = entry.offset().left + entry.outerWidth();
}
if (listWidth < needWidth) {
entry.css("display", "none");
entry.next().css("display", "none");
++nHidden;
} else {
break;
}
}
if (nHidden == 0) {
countSpan.css("display", "none");
countSpan.prev().css("display", "none");
}
注:このコードは、空のリストを処理しないことがあり
.List {
overflow: hidden;
white-space: nowrap;
border: 1px dashed gray; /* Only for debugging. */
}
.Entry {
padding-left: 0.5ex;
padding-right: 0.5ex;
background-color: LightGreen; /* Only for debugging. */
}
.Count {
padding-left: 0.5ex;
padding-right: 0.5ex;
background-color: Orange; /* Only for debugging. */
}
このJavaScriptコードを想定します。このコードは、最初のエントリでさえも長すぎる状況を処理しない場合があります。 私はこれらの問題を読者の練習問題として残しています。
Go see it on my JSFiddle! >>
あなたが本当にこれをしたい場合は、もしそうならば、単に休息をカウントし、それらを追加しない、配列とそれを試してみて、文字数が制限をオーバーラップチェック...常に準備"+2"のための3つ以上の文字スペースと "|"も3文字として数えます。 –
jqueryを使用しても構いませんか? – Aruna