Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery遍历:选择->;选项->;文本_Jquery_Select_Text_Option_Traversal - Fatal编程技术网

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