使用JavaScript获取选定的选项文本


124

我有一个像这样的下拉列表:

<select id="box1">
<option value="98">dog</option>
<option value="7122">cat</option>
<option value="142">bird</option>
</select>

如何使用JavaScript获取实际的选项文本而不是值?我可以通过以下方式获得价值:

<select id="box1" onChange="myNewFunction(this.selectedIndex);" >

但不是7122我想要的cat


2
stackoverflow.com/a/1085810/1339473看到此内容以获取更多帮助
QuokMoon 2013年

如何使用JavaScript获取dropdownlist的选定值的可能重复项-尽管标题,它回答了您的问题。
Felix Kling

Answers:


226

尝试选项

function myNewFunction(sel) {
  alert(sel.options[sel.selectedIndex].text);
}
<select id="box1" onChange="myNewFunction(this);">
  <option value="98">dog</option>
  <option value="7122">cat</option>
  <option value="142">bird</option>
</select>


28
尝试使用正则表达式时的第一条规则-继续搜索堆栈溢出,直到看到不需要正则表达式的解决方案为止-欢呼声:)
Mirror318年

2
在没有大写
字母

91

纯JavaScript

var sel = document.getElementById("box1");
var text= sel.options[sel.selectedIndex].text;

jQuery的:

$("#box1 option:selected").text();

1
@mplungjan为什么您在这里不评论jQuery使用.textContent.innerText用于.text()方法操作?它不是按标准的,完全错误的,因为它没有使用.text。下票在哪里?
2013年

innerHTML在哪里?
mplungjan

@mplungjan不是innerHTMLinnerText甚至更糟。
2013年

我看到选项:{get:function(elem){var val = elem.attributes.value; 返回!val || val.specified?elem.value:elem.text;} in 1.9
mplungjan

15

所有这些功能和随机的东西,我认为最好使用它,并像这样做:

this.options[this.selectedIndex].text



1

您需要获取选项的innerHTML,而不是其值。

使用this.innerHTML代替this.selectedIndex

编辑:您需要首先获取option元素,然后使用innerHTML。

使用this.text代替this.selectedIndex


错了 它将在虎视眈眈innerHTML<select>元素。
2013年

1
 <select class="cS" onChange="fSel2(this.value);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS1" onChange="fSel(options[this.selectedIndex].value);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select><br>

 <select id="iS2" onChange="fSel3(options[this.selectedIndex].text);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS3" onChange="fSel3(options[this.selectedIndex].textContent);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS4" onChange="fSel3(options[this.selectedIndex].label);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS4" onChange="fSel3(options[this.selectedIndex].innerHTML);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <script type="text/javascript"> "use strict";
   const s=document.querySelector(".cS");

 // options[this.selectedIndex].value
 let fSel = (sIdx) => console.log(sIdx,
     s.options[sIdx].text, s.options[sIdx].textContent, s.options[sIdx].label);

 let fSel2= (sIdx) => { // this.value
     console.log(sIdx, s.options[sIdx].text,
         s.options[sIdx].textContent, s.options[sIdx].label);
 }

 // options[this.selectedIndex].text
 // options[this.selectedIndex].textContent
 // options[this.selectedIndex].label
 // options[this.selectedIndex].innerHTML
 let fSel3= (sIdx) => {
     console.log(sIdx);
 }
 </script> // fSel

但是:

 <script type="text/javascript"> "use strict";
    const x=document.querySelector(".cS"),
          o=x.options, i=x.selectedIndex;
    console.log(o[i].value,
                o[i].text , o[i].textContent , o[i].label , o[i].innerHTML);
 </script> // .cS"

还有这个:

 <select id="iSel" size="3">
     <option value="one">Un</option>
     <option value="two">Deux</option>
     <option value="three">Trois</option>
 </select>


 <script type="text/javascript"> "use strict";
    const i=document.getElementById("iSel");
    for(let k=0;k<i.length;k++) {
        if(k == i.selectedIndex) console.log("Selected ".repeat(3));
        console.log(`${Object.entries(i.options)[k][1].value}`+
                    ` => ` +
                    `${Object.entries(i.options)[k][1].innerHTML}`);
        console.log(Object.values(i.options)[k].value ,
                    " => ",
                    Object.values(i.options)[k].innerHTML);
        console.log("=".repeat(25));
    }
 </script>

1

据我所知,有两种解决方案。

两者都只需要使用香草javascript

1个已选择

现场演示

const log = console.log;
const areaSelect = document.querySelector(`[id="area"]`);

areaSelect.addEventListener(`change`, (e) => {
  // log(`e.target`, e.target);
  const select = e.target;
  const value = select.value;
  const desc = select.selectedOptions[0].text;
  log(`option desc`, desc);
});
<div class="select-box clearfix">
  <label for="area">Area</label>
  <select id="area">
    <option value="101">A1</option>
    <option value="102">B2</option>
    <option value="103">C3</option>
  </select>
</div>

2种选择

现场演示

const log = console.log;
const areaSelect = document.querySelector(`[id="area"]`);

areaSelect.addEventListener(`change`, (e) => {
  // log(`e.target`, e.target);
  const select = e.target;
  const value = select.value;
  const desc = select.options[select.selectedIndex].text;
  log(`option desc`, desc);
});
<div class="select-box clearfix">
  <label for="area">Area</label>
  <select id="area">
    <option value="101">A1</option>
    <option value="102">B2</option>
    <option value="103">C3</option>
  </select>
</div>



-1

请尝试以下方法:

myNewFunction = function(id, index) {
    var selection = document.getElementById(id);
    alert(selection.options[index].innerHTML);
};

看到这里jsfiddle示例


1
为什么每个人都坚持使用innerHTML?使用.text!以及为什么将所有这些东西传递给函数。只需传递(this)并让函数确定要使用的内容
mplungjan

嗯,我认为可能会更好/更快,但我想听听@mplungjan的反驳。
Nick Pickering

1
innerHTML是Microsoft发明的一种便捷方法。然后将其复制到更多的浏览器,但是由于a)它不是标准的,并且b)您不能在选项中包含html,所以当选项具有.value和.text时,绝对没有必要混淆这个问题
mplungjan 2013年

innerHTML实在是太方便了……我愿意为此牺牲所有标准和简单性。:P
Nick Pickering

1
我个人将jQuery的.text()与纯JS的.innerHTML结合使用,并帮助我避免仅在习惯上混合匹配框架时出错。我知道innerHTML在所有浏览器中都能工作,这让我感到很高兴:)哦,我指定了两个函数参数,以便OP可以更轻松地与我的解决方案相关联,没有其他原因。
ericosg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.