如何使用jquery查找选项的最大长度

如何使用jquery查找选项的最大长度,jquery,Jquery,我有一个选项选择,它是一个转换的选择,而不是正常的选择 <select> <option value="0">apple</option> <option value="1">orange</option> <option value="2">bannan fruit</option> </select> 苹果 橙色 板南果 如何使用Jquery在选项(bannan水果)中找到最大长度?强制一行

我有一个选项选择,它是一个转换的选择,而不是正常的选择

<select>
<option value="0">apple</option>
<option value="1">orange</option>
<option value="2">bannan fruit</option>
</select>

苹果
橙色
板南果

如何使用Jquery在选项(bannan水果)中找到最大长度?

强制一行解决方案:

var max_length = -1;
$('option').each(function(){
  max_length = Math.max(max_length, $(this).text().length);
});
alert(max_length);
Math.max.apply(null, $('option').map(function() { return $(this).html().length; }).toArray())
我想说Dogbert的解决方案可能更具可读性,但这里可能还有一些有趣的教训。发生了什么事:

  • 用于获得仅包含长度的结果集
  • 使用从结果集中生成实际数组,这是
    所需的。apply
  • 使用
    apply
    将数组传递给
    Math.max
    ,这将使第二个参数成为
    arguments
    集合,即相当于写入
    Math.max(5,6,12)
如果您正在使用,代码看起来会更整洁:

Array.prototype.max = function() {
  return Math.max.apply(null, this)
}

$('option').map(function() { return $(this).html().length; }).toArray().max();

强制性一行解决方案:

Math.max.apply(null, $('option').map(function() { return $(this).html().length; }).toArray())
我想说Dogbert的解决方案可能更具可读性,但这里可能还有一些有趣的教训。发生了什么事:

  • 用于获得仅包含长度的结果集
  • 使用从结果集中生成实际数组,这是
    所需的。apply
  • 使用
    apply
    将数组传递给
    Math.max
    ,这将使第二个参数成为
    arguments
    集合,即相当于写入
    Math.max(5,6,12)
如果您正在使用,代码看起来会更整洁:

Array.prototype.max = function() {
  return Math.max.apply(null, this)
}

$('option').map(function() { return $(this).html().length; }).toArray().max();

您可以将jQuery对象的原型设置为:

jQuery.prototype.select_longest = function () { 
    var res = ""; 
    $(this).children().each(function () {
        if ($(this).html().length > res.length) 
            res = $(this).html(); 
    }); 
    return res;        // use this line if you want biggest string
    return res.length; // use this line if you want length of biggest string
}
var longest = $("#id").select_longest();
然后你可以这样使用它:

jQuery.prototype.select_longest = function () { 
    var res = ""; 
    $(this).children().each(function () {
        if ($(this).html().length > res.length) 
            res = $(this).html(); 
    }); 
    return res;        // use this line if you want biggest string
    return res.length; // use this line if you want length of biggest string
}
var longest = $("#id").select_longest();

您可以将jQuery对象的原型设置为:

jQuery.prototype.select_longest = function () { 
    var res = ""; 
    $(this).children().each(function () {
        if ($(this).html().length > res.length) 
            res = $(this).html(); 
    }); 
    return res;        // use this line if you want biggest string
    return res.length; // use this line if you want length of biggest string
}
var longest = $("#id").select_longest();
然后你可以这样使用它:

jQuery.prototype.select_longest = function () { 
    var res = ""; 
    $(this).children().each(function () {
        if ($(this).html().length > res.length) 
            res = $(this).html(); 
    }); 
    return res;        // use this line if you want biggest string
    return res.length; // use this line if you want length of biggest string
}
var longest = $("#id").select_longest();

@Simon Yes bannana水果串是选项中最大的文本…@Simon Yes bannana水果串是选项中最大的文本…只需将
.val()
更改为
.text()
@Dogbert我尝试过使用max_length=Math.max(max_length,$(this).width());它在FF中工作,但在IE中宽度仍然为0…只需将
.val()
更改为
.text()
@Dogbert我尝试使用max_length=Math.max(max_length,$(this.width());它在FF中起作用,但在IE中,宽度仍然是0…+1,这是充分使用语言功能所必需的向上投票。(
.toArray()
是正确的,但是多余的,因为jQuery对象实际上是一个数组-我想它应该是
.text()
而不是
.html()
)+1个强制投票,以确保足够的语言功能使用。(
.toArray()
是正确的,但是多余的,因为jQuery对象实际上是一个数组——我想它应该是
.text()
而不是
.html()