2016-08-10 8 views
0

Example Fiddleタグで要素をフィルタリングする

私のコードが入力をサポートするように条件を追加する必要があります(1ボタンはJson全体を生成する必要があります)。

私はフィルタリングを試してみた:

elements.tagName 

しかし、それは私に未定義を与える、私は

var elements = document.getElementsByClassName('selectVal'); 

はノードリストを返しますので、それがあるとします。同じ機能が入力をサポートするように、コードをフィルタリングまたは適応するにはどうすればよいですか?

リスト内の選択したアイテムと入力ボタンを1つのボタンだけで入力する必要があります。

+2

'document.querySelectorAll( 'selectVal、入力')' – adeneo

+0

JSFiddleはいいですが、あなたのコードは、問題のあることが必要です。あなたの質問を編集してコードを追加してください。 – Makyen

+0

セレクタに入力を追加するだけでは役に立ちません。値を取得するために要素をループするときに、どのタイプの要素をチェックする必要があります。 – Asken

答えて

1

elementsは、getElementsByClassNameから得られる要素の配列です。代わりにループ内のelements[index]のtagNameをチェックする必要があります。

入力(ただし、すべてのフォームオブジェクトへのより良いクラスにselectValを置き換え)を追加します:あなたがタグ

... 
var strSel = ''; 
if (element.tagName == 'SELECT') 
    strSel = element.options[element.selectedIndex].text; 
else if (element.tagName == 'INPUT') 
    strSel = element.value; 
... 
+0

単純な修正で、 'select'と 'input'を大文字にする必要があります。 – Pablo

+0

@Pablo修正済みです。ありがとう。 – Asken

0

jQueryのようなものを使用する以外に、エレガントなリストのフィルタリング方法がわかりません。あなたは、古い学校の溶液で立ち往生されることがあります。

var elements = document.getElementsByClassName('selectVal'); 
for (var i = 0; i < elements.length; ++i) { 
    var element = elements[i]; 
    if (i.tagName == 'DIV') { 
     // whatever 
    } 
} 

をこれはあなたのクラスselectValのすべて<div>のでしょう、言った:

var elements = document.querySelectorAll('div.selectVal'); 

ユースケースによっては十分かもしれません。

1

を探すために、ループの内側の一部を変更することができます

<input id="textbox" class="selectVal" value="text value"> 

を上記のコメントで述べたように、querySelectorAllに複数のセレクタをカンマで区切って,を使用すると、.selectValinputの値を得ることができます:

document.querySelectorAll('.selectVal, input'); 

これが役立ちます。

function getSelectedItems(){ 
 
    var elements = document.querySelectorAll('.selectVal, input') 
 

 
    for (var i = 0; i < elements.length; i++) { 
 
    var element = elements[i]; 
 

 
    if (element.tagName==='SELECT') 
 
     console.log(element.options[element.selectedIndex].text); 
 
    else 
 
     console.log(element.value); 
 
    } 
 
}
<select id="Sobre" class="selectVal"> 
 
    <option value="1" selected>fasfaf</option> 
 
    <option value="2">afsaf</option> 
 
    <option value="3">Fraasfsafe</option> 
 
</select> 
 

 
<select id="asdafa" class="selectVal"> 
 
    <option value="1">fassad</option> 
 
    <option value="2" selected>fasfsa</option> 
 
    <option value="3">asdasf</option> 
 
</select> 
 

 
<select id="asdf" class="selectVal"> 
 
    <option value="1">fdsa</option> 
 
    <option value="2">asdfg</option> 
 
    <option value="3" selected>dsaf</option> 
 
</select> 
 

 
<input name="test" value='input value' /> 
 
<button onClick="getSelectedItems()">Añadir</button>

+0

var strSel = element.options [element.selectedIndex] .text;なぜこのソリューションで私に不確定性を与えているのですか? – Pablo

+0

あなたは 'element'変数を定義しなければなりません。 –

関連する問題