jquery-traversing:select - >选项 - >文本

时间:2011-02-15 20:33:21

标签: jquery select text option traversal

我想将变量与select - >进行比较选项 - >选择的文字是为了改变“选中”的attrib,这里是我的代码,它有效,但我认为不是写它的最好方法,请原谅我的英文,我用google翻译求助hehehehe:

var lista = 'example 1'; 
$("#id option").each(function(){
  if($(this).text() == lista){
    $(this).attr('selected','selected');
  }
});

这是html:

<select id="id" >
  <option value="0" >example 1</option>
  <option value="1" >example 2</option>
</select>

这是一些尝试

$('#id option:eq("'+lista+'")').attr('selected','selected')

$("#id option[text='"+lista+"']").attr('selected','selected')

5 个答案:

答案 0 :(得分:7)

您可以尝试以下方法,而不是循环遍历每个:

var lista = 'example 1'; 
$('#id option:contains(' + lista + ')').attr('selected', true);

$('#id option:[text="' + lista + '"]').attr('selected', true);

同样适用。这取决于您的变量lista是完全匹配还是仅部分匹配。

答案 1 :(得分:2)

你所拥有的东西没有任何问题,jQuery会在引擎盖下做得多或少。

如果你想把它们连在一起,你可以使用filter()

var lista = 'example 1'; 
$('#id option').filter(function () { 
    return $(this).text() == lista; 
})[0].selected = true;

:contains可能适合您,但它的工作方式类似于通配符匹配,例如 cat 将匹配类别

var lista = 'example 1'; 
$('#id option:contains(' + lista + ')')[0].selected = true;

答案 2 :(得分:2)

你的方式非常有效,但可以更像这样:

var lista = 'example 1'; 
$("#id option").each(function(){
    if( this.text == lista ){
      this.selected = true;
      return false;
    }
});

这使用原生属性,因此它会更快。

  • .text属性提供<option>元素的文本内容

  • .selected设置所选属性

  • return false;会在选择一个循环后中断循环,因此不会不必要地继续

答案 3 :(得分:1)

这应该有效:

$("#id option").attr('selected', function() {
    return this.innerHTML === lista;
});

答案 4 :(得分:0)

我可能太晚了。

var lista = 'example 1';
$('#id option[text="' + lista + '"]').attr('selected', true);

快约97%
var lista = 'example 1';
$('#id option:contains("' + lista + '")').attr('selected', true);

检查http://jsperf.com/selector-performance-00000

的效果日志