jQuery преобразует «option:contains» в точное строковое значение

#javascript #jquery

#javascript #jquery

Вопрос:

Прямо сейчас я получаю select параметр value (буквальный value атрибут) из jQuery, проблема в том, что он принимает первое найденное значение, которое просто «содержит» это ключевое слово.

Например, если бы у меня было a select с двумя опциями: Silver Division ( value=1 ) и Silver ( value=2 ) , если бы я вызвал следующую строку кода, она вернула бы ( value=1 ), а не ( value=2 )

 var ranking = "Silver"; // hard-coded for example
var setIndex = $("#userElo"  " > option:contains("   ranking   ")").val();
 

В: Я безуспешно пытался найти что-то вроде, option:equals чтобы он искал только точные совпадения строк. Я пробовал различные тесты и предположения, подобные следующим.

 var setIndex = $("#userElo"   ID   " > option:contains"   ranking).val();
var setIndex = $("#userElo"   ID   " > option[text="   ranking   "]").val();
var setIndex = $("#userElo"   ID   " > option[text="   ranking).val();
 

Вот демонстрация JSFiddle в простом масштабе, показывающая деление серебра и выпуск серебра.

Однако у меня заканчиваются идеи, поэтому, если кто-нибудь знает какой-нибудь синтаксис для этого решения, это было бы здорово!

Спасибо!

Ответ №1:

Вам нужно будет выбрать все параметры, которые потенциально могут совпадать, а затем использовать filter() функцию, чтобы сузить их до тех, которые действительно соответствуют тексту, который вы хотите. Это должно сделать это:

 var ranking = "Silver";
var setIndex = $("#userElo > option").filter(function() {
    return $(this).text() === ranking;
}).val();
 

Комментарии:

1. Спасибо за ответ! Я понимаю, что вы имеете в виду, но, похоже, я не могу заставить это работать в моей демонстрации JSFiddle . Я неправильно его реализую?

2. @Austin Как сказал abhitalks, это потому, что в вашем коде нет переменной ID. Я не смотрел на скрипку, я просто предположил, что попытки кода в вашем вопросе использовали правильный селектор. Я отредактирую свой ответ. РЕДАКТИРОВАТЬ: вот обновленная скрипка .

3. АХ, спасибо! Я заметил, что также забыл использовать trim() on $(this).text() , так как моя БД добавляет дополнительные пробелы к значениям.