クロス ブラウザー ソリューションとして、テキストの末尾に「省略記号」効果を模倣する単純な関数があります。この関数は、テキストの末尾から 2 文字を削除し、まだオーバーフローがあるかどうかを確認します。存在する場合、関数は実行を継続し、存在しない場合、関数は戻ります。これらの機能はいたるところにあり、非常にシンプルです。
少なくともChromeで問題が発生しました(まだ他の人に悩まされていません)。テキストに HTML エンティティ (私の特定のケースでは「&」) がある場合、ブラウザはエンティティを「推測」しています。エンティティが完成しました。
例
関数が実行されるときのテキストのサンプル console.log は次のとおりです...
"hey mike & u..."
"hey mike &..."
"hey mike &am..."
"hey mike &..."
"hey mike &am..."
"hey mike &..."
ご覧のとおり、エンティティに到達すると、それが何であれ、テキストが DOM に挿入されるとエンティティが推測されます。これは明らかに終わりのないループになります。
何かご意見は?
編集
以下のコードで html() の代わりに text() を使用して問題を解決しましたが、ブラウザ (または他の何か) がエンティティを推測する理由についての質問にはまだ答えていません...
while($this[0].scrollHeight>$this.outerHeight() && $this.html().length){
// var text = $this.html() *old method, with error*
var text = $this.text();
$this.html(text.substr(0,text.length-5)+"...");
}