Опция: выбранный не работает jquery 1.9

Следующее:

  $("select option:contains(fish)").attr('selected', true);

Прекрасно работает в чем-либо ниже jQuery 1.9, но не работает вообще в jQuery 1.9+. Я искал любую документацию о любых изменениях, но ничего не нашел.

Любая идея, как заставить этот код работать с новым jquery?

Пример здесь (по умолчанию используется jQuery 1.4): http://jsfiddle.net/reigel/TZmEw/

Ответ 1

Используйте prop api вместо attr для jquery 1.9.

$("select option:contains(fish)").prop('selected', 'selected');

ИЛИ

 $("select option:contains(fish)").prop('selected', true);

Причина: jQuery 1.6 представил метод .prop() для установки или получения свойств на узлах и отказался от использования .attr() для установки свойств. Однако версии до 1.9 продолжали поддерживать использование .attr() для конкретных ситуаций. Такое поведение во имя обратной совместимости вызывает путаницу при использовании селекторов, которые различают атрибуты и свойства.

Источник: http://jquery.com/upgrade-guide/1.9/#changes-of-note-in-jquery-1-9

Упомянуто в Attr Api: Как и в jQuery 1.6, метод .attr() возвращает undefined для атрибутов, которые не были установлены. Кроме того,.attr() не следует использовать для простых объектов, массивов, окна или документа. Чтобы получить и изменить свойства DOM, используйте метод .prop().

Источник: http://api.jquery.com/attr/#entry-longdesc

Ответ 2

$("select option:contains(fish)").attr('selected', 'selected');

Ответ 3

Пожалуйста, смотрите документацию jQuery по теме в отношении конкретно 1.9. .attr vs. .prop может сбить с толку, поскольку я знаю, что нет конкретного способа узнать, что такое "свойства". Во всех смыслах и целях при изменении значений, которые пользователь имеет возможность изменять... особенно логические значения, вы должны использовать .prop

Единственное исключение - входное значение - для этого вы должны использовать .val. Точно так же лучше использовать .val для установки значения элементов <select> - нелегко сделать в вашем случае, но это было бы более точно.

jQuery 1.6 представил метод .prop() для установки или получения свойств на узлах и отказался от использования .attr() для установки свойств. Однако версии до 1.9 продолжали поддерживать использование .attr() для конкретных ситуаций.

Ответ 4

Попробуйте это

$("select option").removeAttr('selected').filter(":contains(fish)").attr('selected', true);

Ответ 5

Так как jQuery 1.6, вы должны использовать prop:

$("select option:contains(fish)").prop('selected', true);

В jQuery 1.6.1 они повторно представили эту функциональность методу attr для обратной совместимости (люди жаловались). В 1.9 они снова удалили его, так как эта функция устарела достаточно долго.