jquery遍历:选择->;选项->;文本
我想将一个变量与选择->选项->文本进行比较,以更改“选定”属性,这是我的代码,它可以工作,但我认为这不是编写它的最佳方式,请原谅我的英语,我使用谷歌翻译来帮助他jquery遍历:选择->;选项->;文本,jquery,select,text,option,traversal,Jquery,Select,Text,Option,Traversal,我想将一个变量与选择->选项->文本进行比较,以更改“选定”属性,这是我的代码,它可以工作,但我认为这不是编写它的最佳方式,请原谅我的英语,我使用谷歌翻译来帮助他 var lista = 'example 1'; $("#id option").each(function(){ if($(this).text() == lista){ $(this).attr('selected','selected'); } }); 以下是html: <select id="id"
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").attr('selected', function() {
return this.innerHTML === lista;
});
您可以尝试以下方法,而不是循环通过每种方法:
var lista = 'example 1';
$('#id option:contains(' + lista + ')').attr('selected', true);
或
同样有效。这取决于您的变量
lista
是需要精确匹配还是只需要部分匹配。您所拥有的并没有什么问题,jQuery将或多或少地做相同的事情
如果要将其全部链接在一起,可以使用:
var lista = 'example 1';
$('#id option').filter(function () {
return $(this).text() == lista;
})[0].selected = true;
可能适用于您,但它的工作方式类似于通配符匹配,例如cat将匹配类别:
您的方法非常有效,但可以这样做:
var lista = 'example 1';
$("#id option").each(function(){
if( this.text == lista ){
this.selected = true;
return false;
}
});
这将使用本机属性,因此速度更快
属性提供.text
元素的文本内容
设置所选属性.selected
返回false代码>将在选择一个循环后中断循环,因此它不会不必要地继续
- 我可能太晚了
var lista = 'example 1';
$('#id option[text="' + lista + '"]').attr('selected', true);
这比以前快了97%
var lista = 'example 1';
$('#id option:contains("' + lista + '")').attr('selected', true);
查看上的性能日志,我相信OP只是想对自己的代码进行优化。@Victor是的,我没有注意到第二个选项是完美的,我需要完全匹配,我想我已经非常接近了hehehee@Victor你确定吗?:)我不知道为什么,但是代码只有在冒号存在的情况下才有效。。。看这里:@Victor你是说你不小心把冒号放在了那个位置,结果却发现它只能这样工作?这真是太搞笑了
:)
这种行为的原因是冒号破坏了querySelectorAll
的选择器,因为它无效。因此,它默认为Sizzle,它可以容忍冒号,即使技术上不支持冒号(这意味着它将来可能会损坏)。我猜Sizzle会同时检查属性和属性。因此,它不会找到text
属性,但会找到text
属性(正如我在回答中使用的)…借用@Šime Vidas的小提琴,这表明Sizzle将匹配一个属性,而不仅仅是一个属性,其属性等于选择器。虽然第一个选择器的性能通常会更好,但性能差异的部分原因可能是[text=…]
如果浏览器支持querySelectorAll
,则版本与任何元素都不匹配。这是因为querySelectorAll
将查找文本
属性,而选项
元素没有该属性。我需要不区分大小写的属性。这是可能的吗?@Kees:您必须使用filter()
路径,并使用带有i
修饰符的正则表达式。如果你陷入困境,问一个问题;这类事情会在几分钟内给你一个答案。是的,我用了过滤器。谢谢你的建议!
var lista = 'example 1';
$("#id option").each(function(){
if( this.text == lista ){
this.selected = true;
return false;
}
});
var lista = 'example 1';
$('#id option[text="' + lista + '"]').attr('selected', true);
var lista = 'example 1';
$('#id option:contains("' + lista + '")').attr('selected', true);