javascript如何使用不与select数组的索引

时间:2015-01-12 19:01:32

标签: javascript

我有一个值,称之为a,以及一个id =“sid”的选择框。我是javascript,想知道我的值a是否是选择框中的选项之一。

我做到了这一点:HTML:

<select id = "sid">
  <option>a</option>
  <option>b</option>
</select>
<script>
  isThere('sid')
</script>

Javascript:

function isthere(id) {
  var x = document.getElementById(id).options;

  for (j = 0; j<= 1; j++) {
  alert ("arr is " + x[j].text );
} 

var c = x.text.indexOf("a");
  alert ("c is " + c);
}

循环为x [j] .text提供正确的答案。我没有得到c的值。 Firebug给出了错误“x.text未定义”。

使用indexOf的正确方法是什么,找出“a”是否在此选择框中?效率方面,我会更好地循环通过x.text [j]?

5 个答案:

答案 0 :(得分:3)

如果您有一组值,则可以使用indexOf

要获取值数组,可以使用

[].map.call(x, function(option) {
    return option.value;
});

因此,您可以使用

[].map.call(x, function(option) {
    return option.value;
}).indexOf("a");

在ECMAScript 6中,您可以将其简化为

[].map.call(x, option => option.value).indexOf("a");

&#13;
&#13;
var x = document.getElementById("sid");
alert([].map.call(x, function(option) {
  return option.value;
}).indexOf("a"));
&#13;
<select id="sid">
  <option>a</option>
  <option>b</option>
</select>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这样:

    function isThere(id, value) {
        for (i = 0; i < document.getElementById(id).length; ++i){
            if (document.getElementById(id).options[i].value === value){
              return true;
            }
        }
        return false;
    }

答案 2 :(得分:0)

这个怎么样:

<HTML>
 <head>
  <script>
   function makeArray(id) {
       var x = document.getElementById(id);
       var arr = [];
       for (var i = 0; i < x.length; i++) {
           arr.push(x.options[i].value);
       }
       return arr;
   }
   function isthere(id) {
    var arr = makeArray(id);
    var c = arr.indexOf("b");
    alert ("c is " + c);
   }
  </script>
 </head>
 <BODY onload="isthere('sid');">
  <select id = "sid">
  <option>a</option>
  <option>b</option>
  </select>
 </body>
</html>

答案 3 :(得分:0)

当你x.text.indexOf("a");对阵列<option>进行反思时。没有元素的文本。 ......你也可以......

var x = document.getElementById(id).options;

  for (j = 0; j<= 1; j++) {
   if (x[j].text.indexOf("a"){
       alert("it is a");
   }
} 

或         var x = document.getElementById(id).options;

  x.forEach(function (element) {
        if (element.text.indexOf("a")){
            alert("it is a");
        }
  });

您可以使用==代替.indexOf LIKE那个

if (element.text == "a")){
            alert("it is a");
}

答案 4 :(得分:0)

如果您尝试显示所选选项的文本,可以使用此选项:

function isthere(id) {
  var x = document.getElementById(id).options;
 var c = x[x.selectedIndex].text
 alert ("c is " + c);
 }

indexOf用于在数组中查找索引,因为x是 HTMLOptionsCollection 你不能使用indexOf