Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Выбор option в select по value


Автор: maxipub 29.5.2013, 10:51
Добрый день, уважаемые!

Есть вариант как сделать сабж, иначе неж перебирать все option в select, пока не найдем нужный value?

На чистом JavaScript. smile 

up
если что, под выбором подразумивается selected="selected" smile

Автор: Arantir 29.5.2013, 14:01
JavaScript предоставляет отличную http://ru.wikipedia.org/wiki/Document_Object_Model.
Все опции содержаться в поле options объекта поля select.
Код

var select = document.getElementById('my_select');
var currentOption = select.options[select.selectedIndex];

Просто пользуйтесь описание DOM-объектов, чтобы узнать их полезные поля и методы: http://www.w3schools.com/jsref/dom_obj_select.asp

Автор: Amphiluke 29.5.2013, 17:08
Цитата

  Выбор option в select по value ... На чистом JavaScript
  

Конечно же, ответ — document.querySelector() smile
Код

option = document.querySelector("#my_select option[value='value_attribute']")


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a5b36d6ccc196e1e000003#findElement_E7045_51a60bc66ccc19574f001593_0

Автор: Arantir 29.5.2013, 17:29
Цитата(Amphiluke @  29.5.2013,  16:08 Найти цитируемый пост)
Конечно же

Только вот он медленный до ужаса. http://jsperf.com/find-selected-option

Цитата(maxipub @  29.5.2013,  09:51 Найти цитируемый пост)
 иначе неж перебирать все option в select

querySelector как раз это и сделает, причем прихватит еще и кучу остальных элементов, у которых будет проверять параметры селектора.

Коллекции в JS хранятся в виде хэш-таблиц. Так что выбирать напрямую из коллекции id-шных элементов, а потом из options, — самый быстрый способ. Для готовых конструкций, вроде тега select, лучше пользоваться стандартными и быстрыми возможностями.

querySelector полезен, когда его нельзя заменить ничем, кроме такого же "ручного" перебора элементов.

Автор: Amphiluke 29.5.2013, 17:50
Цитата (Arantir)

   Только вот он медленный до ужаса. http://jsperf.com/find-selected-option
   

Ну если это дело не гонять в затяжных циклах, то это не аргумент против данного метода. А вообще тест, который вы привели, не совсем соответствует постановке задачи ТС. На самом деле, можно вполне оптимизировать код, использующий querySelector. Во первых, при возможности кэшировать результат, не повторяя поиск на каждой итерации. Во-вторых, область поиска по селектору не обязательно весь документ: элементы также реализуют этот метод для поиска в пределах своего контекста.
Вот тест для постановки задачи данного топика: http://jsperf.com/find-option-by-value. Тут метод оказывается, вроде, не настолько «медленный до ужаса».

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a5b36d6ccc196e1e000003#findElement_E7045_51a615c26ccc197d7c000091_0

Автор: Arantir 29.5.2013, 18:02
Цитата(Amphiluke @  29.5.2013,  16:50 Найти цитируемый пост)
А вообще тест, который вы привели, не совсем соответствует постановке задачи ТС.

Я руководствовался словами ТС.
Цитата(maxipub @  29.5.2013,  09:51 Найти цитируемый пост)
up
если что, под выбором подразумивается selected="selected" 

Наверное, он был не в курсе про select.options и select.selectedIndex, и хотел делать это через непосредственный select.value.

Автор: Amphiluke 29.5.2013, 18:03
Цитата(maxipub @  29.5.2013,  14:51 Найти цитируемый пост)
upесли что, под выбором подразумивается selected="selected"

Что за странность. Смотрел этот топик на http://ru.vingrad.com/Выбор-option-в-select-по-value-id51a5b36d6ccc196e1e000003 там этой поправки нет. smile

Добавлено через 5 минут и 12 секунд
Ну, коли так, и надо искать выбранный option, тогда да, querySelector — излишество…

Автор: Arantir 29.5.2013, 18:18
Цитата(Amphiluke @  29.5.2013,  17:03 Найти цитируемый пост)
Что за странность. Смотрел этот топик на новом двиге там этой поправки нет. 

Грустно, что из-за такого иногда возникает непонимание между людьми...
Странность еще та. Админы вроде-бы говорили, что база данных общая. Такие динамичные страницы, как темы, кешироваться не должны. 
В своих постах на новом движке изменения я вижу, хоть и делал их со старого движка.
Может быть там понятие первого поста немного другое (например, это поле в таблице самой темы) и реадктирование, соотвтственно, тоже не такое как на старом.

Автор: maxipub 30.5.2013, 11:55
Круто! smile Всем спасибо, querySelector рулит! smile

Добавлено через 2 минуты и 50 секунд
Цитата(maxipub @  29.5.2013,  10:51 Найти цитируемый пост)
если что, под выбором подразумивается selected="selected"

Смотрю моя правка некоторых сбила. Подразумивается присвоение selected="selected". Все ок.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)