ループなしではできません。最長のテキストを持つ要素を見つけるための組み込み DOM 関数はありません。そのため、コードの一部はそれらを反復処理して最長の要素を見つける必要があります。
コードのクリーンアップされたバージョンは次のとおりです。
var longestSoFar = -1;
var longestItem;
$('#content .text').each(function(){
var text = $(this).text();
if (text.length > longestSoFar) {
longestSoFar = text.length;
longestItem = this;
}
});
alert($(longestItem).text());
私が考えることができる他の唯一のことは、最初に要素の高さを比較し.text
、他の要素よりも高いものを見つけてから、それらのテキストの長さを比較することです. これはおそらく、テキストの実際の長さを計算するよりもはるかに高速ですが、それが役立つかどうかは、レイアウトと、高さが正確なフィルターになるかどうかによって異なります。
さらに高速化するには、HTML が一般的にどのように見えるかを確認して、速度低下の原因を把握する必要があります。 .text()
特定の要素内のすべてのテキスト ノードを調べて、すべてのテキストを蓄積する必要があるため、特に高速な操作ではありません。要素にノードが 1 つしかない場合は高速ですが、ノードに関連する HTML が多数ある場合は、すべてのテキスト ノードを見つけるために多数のノードと子ノードをたどる必要があります。
あなたのコードでは、すでに jQuery オブジェクトだったものから jQuery オブジェクトを作成していたことに注意してください。そのように動作しますが、すでに jQuery オブジェクトである場合、関数呼び出しの無駄です。