如果没有循环,您将无法做到这一点。没有内置的 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()
这不是一个特别快的操作,因为它必须遍历给定元素中的所有文本节点并累积它们的所有文本。如果元素中只有一个节点,它很快,但如果节点中有很多涉及的 HTML,那么它有很多节点和子节点要遍历找到所有文本节点。
请注意,在您的代码中,您正在使用已经是 jQuery 对象的东西制作 jQuery 对象。它以这种方式工作,但是当它已经是一个 jQuery 对象时,它是对函数调用的浪费。