2011-07-22 11 views
0

は良い(私は事前に非常に、jQueryのに新しいごめんなさい)の例で説明します属性が属性リストに含まれている場合、jQuery要素を選択しますか?

// Selector for checkboxes not checked 
var checkboxes = "input:checkbox:not(:checked)"; 

// Selector for labels relative to checkboxes not checked 
var labels = "label[for=" + $(checkboxes).attr("id") + "]"; 

$(checkboxes + ", " + labels]).FadeTo("slow", 0.45); 

これは、チェックボックスのために動作しますが、でも、ラベル(妙に、1つのラベルだけが選択されます)のために。

質問:どのように「添付」ラベルを選択できますか?そして、複数の要素が選択された場合(配列、連結リスト、または何を返しますか?)、.attr("name")が実際にどのように動作するか。 (妙に、1つのラベルだけが選択されます)

+0

何あなたのHTMLは次のように見えますか? – BoltClock

+0

基本的に、チェックボックスとラベルの両方を持つコンテナをフェードインできます。 – ShankarSangoli

+0

@BoltClock:私はmvcを使用しています。なぜなら、ビューがスイートクライアントのニーズにどのように適合するべきかを事前に知らないからです。だから、HTMLの構造は簡単に変更することができます。 – gremo

答えて

0

複数の要素が選択されている場合、実際にどのように機能するか .attr("name")

とは、(配列、連結リスト、またはを返します。.. 。 何?)。

要素のセットで.attr()を呼び出すと、最初の要素の属性値のみが返されます。したがって、あなたの場合、最初のチェックボックスのラベルが選択されます。

セレクタ文字列をループで動的に作成することはできますが、効率的ではありません。あなたのラベルとチェックボックスが予測可能なHTML構造であれば、代わりにjQueryのtraversing methodsを使ってそのラベルとチェックボックスを利用することができます。

+0

私はcssセレクタに頼らず、3つの要素がどこに配置されるのか分かりません。 – gremo

0
// Selector for checkboxes not checked 
var checkboxes = $('input:checkbox:not(:checked)'), 
    selector = []; 

checkboxes.each(function(){ 
    selector.push('[for="' + $(this).attr('id') + '"]'); 
}); 

// Selector for labels relative to checkboxes not checked 
var labels = $('label:' + selector.join()); 

私はそれで十分であると思います。

+0

'[name〜=" value "]'の仕組みはどういうものなのでしょうか? – BoltClock

+0

ドキュメントによれば、セレクタは、テスト文字列が属性値の各単語と一致する場合、 'word'は空白で区切られた文字列として定義されます。 " とafaik要素IDに空白を含めることはできません:) – usoban

+0

あなたはそれを後方に持っています。 '[class = =" foo "]'は '

'を選択するための' .foo'に相当します。空白はセレクタではなくHTML属性にあります。 – BoltClock

1

これを試してみてください:

$('input:checkbox:not(:checked)').each(function(){ 
    $('label[for=' + $(this).attr('id') + ']').add(this).fadeTo('slow',0.45); 
}); 
+0

これはそうだと思います。物事をチェーンする必要がない場合は、物事をチェーンしないでください:) – BoltClock

関連する問題