2011-01-29 27 views
23

これは、はい/いいえの種類の質問です。要素のすべての子を再帰的に無効にする

jqueryの要素のすべての子を絶対に無効にしようとしています。

$('#id_of_an_element').children().do(function(){ 
    do_something; 
}); 

を再帰的要素のすべての子を呼び出す呼び出すないか、それだけでdo_something のすべての直接の子孫にいますか?

ヘルプは高く評価され、

ジョシュ

+0

あなたは何をしたいですか?それぞれの子孫に影響を与える必要はないかもしれません。 – user113716

答えて

61

DOM要素の集合を表し、jQueryオブジェクト、.children(考える) 方法は、私たちはの 直接の子を検索することができますこれらの要素 をDOMツリーに追加し、対応する 要素から新しい jQueryオブジェクトを構築します。 .find()および.children() メソッドは、 がDOMツリーを1つのレベルでしか移動しないという点を除いて、同様です。また、ほとんどのjQueryメソッドの のように、.children()は にはテキストノードを返しません。テキストとコメントを含む 子をすべて取得するには、ノード .contents()を使用します。

http://api.jquery.com/children/

あなたは、ネストの任意のレベルですべての子孫に基づいて行動したい場合は、この操作を行うことができます。

$('#id_of_an_element').find('*').attr('disabled', true); 

または子孫セレクタを使用して:

$('#id_of_an_element *').attr('disabled', true); 
+0

それは私のために働く、ありがとう! – jherax

+3

これは、新しいバージョンのjQueryで_attributes_と区別される、 'disabled'のような_properties_に対してわずかに調整する必要があるかもしれません。 "jQuery 1.6では、[.prop()](http://api.jquery.com/prop/)メソッドは明示的にプロパティ値を取得する方法を提供し、.attr()は属性を取得します。 –

+0

素敵な解決策!!! – sony

2

あなたはできます

function disableChildren(obj) { 
    obj.children().each(function(i, val) { 
     disable(val); 
     disableChildren(val); 
    }); 
} 

disableChildren($("#id")); 

を参照してください。.each.doメソッドはありません。

あなたはすべての子孫に影響を与えるようにしたいので、あなたが

5

を「無効」と言うとき、あなたが望むすべての行うことを関数としてdisableを実装する必要があります、ちょうどこの操作を行います。

$('#id_of_an_element *').each(function() { 
    // do something 
}); 

しかし、私はあなたが何をしているのかを知りたいと思っています。

多くの要素タイプでは、disabledプロパティは無意味です。あなたがやっていることがCSSの継承の恩恵を受けることができるかもしれません。

実際にdisabledプロパティが必要な場合は、form要素をターゲットにすることもできます。

$('#id_of_an_element :input').attr('disabled','disabled'); 
+2

':input'セレクタについて+1してください。間違いなく、すべての子孫をループするよりも理にかなっています。 – karim79

+0

@ karim79:ありがとう。何が最善であるかを言うのは難しいですが、私はOPが行っていることに対して適切な解決策は '*'を伴わないと確信しています。私は間違っている可能性があります。 – user113716

関連する問題