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を使用してドロップダウンリストの選択された値を取得する方法の重複の可能性はありますか?-タイトルにもかかわらず、それはあなたの質問に答えます。
Felix Kling

回答:


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
正規表現を使用するときの最初のルール
見つかる

2
大文字のcなしでonchangeを書く方がきれいです
Simon Baars 2018年

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。反対票はどこにありますか?
VisioN

innerHTMLはどこにありますか?
mplungjan 2013

@mplungjanではありませんinnerHTMLinnerTextさらに悪いです。
VisioN

オプションが表示されます:{get:function(elem){var val = elem.attributes.value; !valを返す|| 値指定?elem.value:elem.text;} in 1.9
mplungjan 2013

15

これらすべての関数とランダムなもの、これを使用して、次のようにするのが最善だと思います。

this.options[this.selectedIndex].text



1

値ではなく、オプションのinnerHTMLを取得する必要があります。

this.innerHTML代わりに使用しますthis.selectedIndex

編集:最初にオプション要素を取得してからinnerHTMLを使用する必要があります。

this.text代わりに使用しますthis.selectedIndex


これは間違っています。これは、GRAPますinnerHTML<select>要素を。
VisioN

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

私の知る限り、2つの解決策があります。

どちらもバニラ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を
含める

innerHTMLしかし、とても便利です...そのために、すべての標準とシンプルさを犠牲にしてもかまいません。:P
Nick Pickering

1
個人的に私はjQueryで.text()を使用し、純粋なJSで.innerHTMLを使用して、習慣のみによって、フレームワークをミックスマッチングするときのミスを回避するのに役立ちます。私はinnerHTMLがすべてのブラウザーで機能することを知っており、それが私を幸せにします:)ああ、私は両方の関数パラメーターを指定して、OPが私のソリューションに簡単に関連付けられるようにしました。
ericosg 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.