2016-03-29 8 views
1

まず、複数の要素が1つのページに同じIDを持つことがベストプラクティスではないことがわかります。しかし、この場合、同じIDを持つ2つの選択肢が必要です。同じIDを持つ複数の選択肢内のオプションの数を調べる

私はこの方法を使用して、いくつかの成功を見てきました:

$('#undo_redo_to option').length; 
$('#undo_redo_to:eq(0) option').length; 
*$('#undo_redo_to:eq(1) option').length;* 

しかし、*さんに囲まれたコードは、私に適切な長さを与えるものではありません。

私の選択を作成し、デバッグを行った次のペンを参照してください。

LINK TO CODE

ありがとう!

+2

いいえ、繰り返しIDを持つHTMLは無効です。 – j08691

+1

あなたは手段を持っている場合は、あなたのIDをクラスに変更し、そのようにターゲットを設定します。 –

+0

残念ながら私は手段がありません。 @Rick Hitchcockのメソッドを使って、私が望む動作を得ることができました。私はすべてのフィードバックに感謝します。 – CodeBroJohn

答えて

1

eq()はjQueryセレクタです。 nth-child(2)に変更すると、CSSセレクタが使用されます。それはあなたが必要なものをあなたに与えます:

$('#undo_redo_to:nth-child(2) option').length; 

http://codepen.io/anon/pen/WwERGW?editors=1011

+1

正解!残念ながら、私はマルチセレクションのプラグインhttp://crlcu.github.io/multiselect/を使用していますので、私はID /クラス属性と呼ぶことができるものを制限しています。 トン先生に感謝します。私はさらに計算を行うために、それらの番号が必要です。 あなたは多額の助けをしてくれました! – CodeBroJohn

2

問題はjQueryが先にネイティブJS関数を使用しているため、$('#this_id')を実行すると効果的にdocument.getElementById('this_id')が呼び出されることです。それはあなたが選択して...ただのベストプラクティスに対して、それが実際に動作しませんループができていないですし、IDを確認:あなたはHTMLを継承しましたし、クラスにidを変更することはできませんと仮定

$('select option').each(function(){ 
    if($(this).closest('select').attr('id')=='my_id'){ 
    //do something 
    } 
}); 
0

あなたはこのように、ネイティブのJavaScriptでそれを行うことができます。

document.querySelectorAll("[id=undo_redo_to]") 

あなたはこのようなjQueryを使ってそれを行うことができます。

$("[id=undo_redo_to]") 

これは、#タイプセレクタが検索を停止するため、プロパティセレクタですそのidを持つ最初の要素が見つかったときに、

idは一意である必要があり、一意でない場合はHTMLが無効であり、SEOには悪いのでプレーンなjavascriptまたはjqueryを使用してこれを行うことはできますが、実行しないでください。

関連する問題