jquery-traversing: выберите -> опция -> текст - PullRequest
6 голосов
/ 15 февраля 2011

Я хочу сравнить переменную с select -> option -> text, выбранным для изменения атрибута «selected», вот мой код, он работает, но я думаю, что это не лучший способ написать это, извините Английский, я использовал Google Translate для помощи хе-хе-хе:

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 ]

7 голосов
/ 15 февраля 2011

Вместо того, чтобы проходить через каждый из них, вы можете попробовать это:

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

или

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

Работает так же хорошо.Это зависит только от того, будет ли ваша переменная lista иметь точное или частичное совпадение.

2 голосов
/ 15 февраля 2011

Ваш путь довольно эффективен, но его можно сделать немного больше, вот так:

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

Здесь используются нативные свойства, поэтому он будет быстрее.Свойство

  • .text предоставляет текстовое содержимое элемента <option>

  • .selected, устанавливает выбранное свойство

  • return false; разорвет цикл после выбора, поэтому он не будет продолжать без необходимости

2 голосов
/ 15 февраля 2011

Нет ничего плохого в том, что у вас есть, jQuery будет делать более или менее то же самое под капотом.

Вы можете использовать filter(), если хотите объединить все вместе:

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

:contains может работать для вас, но работает как подстановочный знак, например, кошка будет соответствовать категория :

var lista = 'example 1'; 
$('#id option:contains(' + lista + ')')[0].selected = true;
1 голос
/ 15 февраля 2011

Это должно работать:

$("#id option").attr('selected', function() {
    return this.innerHTML === lista;
});
0 голосов
/ 16 февраля 2011

Я, наверное, слишком поздно.

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

...