1

我有一个菜单。给定一个给定的值,我想返回文本。例如,0 将返回“零”,1 将返回“一”,等等。请注意,我不关心当前选择了哪个选项,也不想自动选择菜单,而只想将选择菜单用作原始数据库。这可以使用 JavaScript 或 jQuery 轻松完成,而无需遍历每个选项吗?

<select>
<option value="0">zero</option>
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>

谢谢

4

5 回答 5

5

与其将其select用作数据库(简单查找需要昂贵的操作),不如从它创建一个数据集,然后使用它...

var vals = $('select option').map(function(i, el) { return el.text; })
                             .toArray();
alert(vals[2]); // "two"

或者,如果这些option值不是基于顺序0的索引,那么使用一个对象......

var vals = {};

$('select option').each(function(i, el) { vals[el.value] = el.text });

alert(vals[2]); // "two"
于 2012-04-10T20:39:42.500 回答
3
var value = '3';
alert($('select option[value=' + value + ']').text());

现场演示

此外,您可能希望为选择提供一个 id 并更新选择器,因为如果您有多个下拉列表,则选择器将不起作用:

alert($('#id_of_the_select option[value=' + value + ']').text());
于 2012-04-10T20:35:35.153 回答
1

如果不遍历每个选项,您将如何扫描一个值?没有神奇的属性可以为你做这件事。

但是,您可以使用以下代码:

(function() {
    var sels = document.getElementsByTagName('select'), l = sels.length, i,
        opts, m, j, o;
    for( i=0; i<l; i++) {
        o = {};
        opts = sels[i].options;
        m = opts.length;
        for( j=0; j<m; j++) o[opts[j].value] = opts[j].text;
        sels[i].map = o;
    }
})();

把它放在前面</body>,现在你可以<select>在你的页面上找到任何地图:

var sel = document.getElementById('mySelect');
alert(sel['0']);
于 2012-04-10T20:36:53.370 回答
0

使用属性等于选择器:

var valToSearchFor = 0;
    textFromOption = $('select option[value="' + valToSearchFor + '"]').text();

这仍然会遍历每个option以测试您正在寻找的值的存在,但它会在“幕后”这样做,这样您就不必这样做了。

有可能使用querySelectorAll()(尽管与上面的jQuery或多或少相同的符号):

var valToSearchFor = 0;
    textFromOption = document.querySelectorAll('option[value="' + valToSearchFor + '"]').innerHTML;

当然,这需要浏览器实现querySelectorAll(),而不是全部实现(尤其是 IE)。

参考:

于 2012-04-10T20:35:22.033 回答
0

使用selected:选择器。页面上给出的示例。

http://api.jquery.com/selected-selector/

 $("select").change(function () {
      var str = "";
      $("select option:selected").each(function () {
            str += $(this).text() + " ";
          });
      $("div").text(str);
    })
    .trigger('change');

将“div”替换为您尝试触发的事件

http://jsfiddle.net/ckaufman/aDU5E/1/

于 2012-04-10T20:36:09.537 回答