我想将变量与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')
答案 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);
的效果日志