jquery-遍历:选择->选项->文本

发布于 2024-10-17 19:55:02 字数 621 浏览 3 评论 0原文

我想将变量与 select 进行比较 ->选项->为了更改“选定”属性而选择的文本,这是我的代码,它有效,但我认为这不是最好的编写方式,请原谅我的英语,我使用谷歌翻译寻求帮助嘿嘿嘿:

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')

I want to compare a variable with a select -> option -> text selected in order to change the "selected" attrib, here is my code, it works but I think is not the best way to write it, excuse my English, I used google translate for help hehehehe :

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

here's the html:

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

here's a few attempts

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一梦浮鱼 2024-10-24 19:55:02

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

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

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

也同样有效。这仅取决于您的变量 lista 是否需要完全匹配或只是部分匹配。

Instead of looping through each, you can try this:

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

or

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

Works just as well. It just depends if your variable lista will need to be an exact match or just a partial one.

风筝在阴天搁浅。 2024-10-24 19:55:02

你所拥有的并没有什么问题,jQuery 会在幕后做或多或少相同的事情。

如果你想将它们链接在一起,你可以使用 filter()

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

< a href="http://api.jquery.com/contains-selector/" rel="nofollow">:contains 可能适合您,但它的工作方式类似于通配符匹配,例如 cat 将匹配 category

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

There's nothing wrong with what you have, jQuery will be doing more-or-less the same under the hood.

You could use filter() if you want to chain it all together:

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

:contains might work for you but it works like a wildcard match, e.g. cat would match category:

var lista = 'example 1'; 
$('#id option:contains(' + lista + ')')[0].selected = true;
妞丶爷亲个 2024-10-24 19:55:02

您的方法非常有效,但可以做得更进一步,如下所示:

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

这使用本机属性,因此速度会更快。

  • .text 属性给出 元素的文本内容

  • .selected 设置所选属性

  • < code>return false; 一旦选择了一个,就会中断循环,所以它不会不必要地继续

Your way is pretty efficient, but could be made a little more so like this:

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

This uses native properties so it will be faster.

  • .text property gives the text content of the <option> element

  • .selected sets the selected property

  • return false; will break the loop once one is selected, so it doesn't needlessly continue

烟雨扶苏 2024-10-24 19:55:02

这应该有效:

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

This should work:

$("#id option").attr('selected', function() {
    return this.innerHTML === lista;
});
欢烬 2024-10-24 19:55:02

我可能来得太晚了。

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

这比

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

http://jsperf.com/selector-performance-00000< 检查性能日志 要快大约 97% /a>

I'm probably too late.

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

This is about 97% faster then

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

check performance log at http://jsperf.com/selector-performance-00000

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文