2012-02-10 16 views
0

div(.views-row)内の要素にクラスを追加しようとしています。私が抱えている問題は、ページ上で.views行が繰り返されてしまうことです。これは避けられないものです。また、スタイルを設定しようとしている要素は、同じかどうかにかかわらず同じクラスになります。コードは、おそらくより良い、それを説明する:jQuery:クラスと.each()

$(".views-row").each(function(){ 
     if ($((this)" .field-name-field-warning:contains('High')").length) { 
      $((this)" .field-name-field-warning").addClass("fault-high"); 
      $((this)" .field-name-field-warning .field-label").addClass("disappear"); 
      $((this)" .field-name-field-warning .field-items").addClass("disappear"); 
     } 
     if ($((this) ".field-name-field-warning:contains('Moderate')").length) { 
      $((this) ".field-name-field-warning").addClass("fault-moderate"); 
      $((this) ".field-name-field-warning .field-label").addClass("disappear"); 
      $((this) ".field-name-field-warning .field-items").addClass("disappear"); 
     } 
}); 

私は(この)部分に問題を抱えていると思います。何かご意見は?

ありがとうございました。この上

+0

$(これは)それに適用される見解行 "クラスとHTML要素になるだろう。 – MattW

+0

あなたの現在の状況で '$(これ)'は何をすると思いますか? – Blender

+0

私は '$(this)'がそれぞれの.views-rowを参照すると期待しました。 –

答えて

1

あなたが現在1内の任意の要素を選択したい場合は、次の2つの方法があります。コンテキストを提供することにより

$(this).find(".field-name-field-warning") 

を(検索など、実質的に同じことをする)::$().find()を使用して

$(".field-name-field-warning", $(this)) 
+0

.find():これは素晴らしい方法です。ありがとう! –

0

(.each使用する必要はありません)ここ.addClass()とにかくあなたのためのすべての要素を繰り返します。

あなたはこのような何かに移動して起動することができます。

var containsHigh = $(".views-row .field-name-field-warning:contains('High')") 
containsHigh.addClass('fault-high'); 
containsHigh.find('.field-label, .field-items').addClass('disappear'); 

var containsModerate = $(".views-row .field-name-field-warning:contains('Moderate')") 
containsModerate.addClass('fault-moderate'); 
containsModerate.find('.field-label, .field-items').addClass('disappear'); 

次に、このような方法を連結することも、手の込んだ取得する:あなたが使用して要素内の要素を検索しようとしているように

var warnings = $(".views-row .field-name-field-warning"); 
warnings.filter(":contains('High')") 
    .addClass('fault-high') 
    .find('.field-label, .field-items').addClass('disappear'); 

warnings.filter(":contains('Moderate')") 
    .addClass('fault-moderate') 
    .find('.field-label, .field-items').addClass('disappear'); 
0

が見えますthis。そのためにはfindメソッド、一致した要素セット内の要素をフィルタリングするにはfilterする必要があります。

ここに完全な簡略化されたコードがあります。

$(".views-row").each(function(){ 
    var $fieldWarning = $(this).find(".field-name-field-warning"); 
    if($fieldWarning.length){ 
     if ($fieldWarning.filter(":contains('High')").length) { 
      $fieldWarning.addClass("fault-high"); 
      $fieldWarning.find(".field-label").addClass("disappear"); 
      $fieldWarning.find(".field-items").addClass("disappear"); 
     } 
     if ($fieldWarning.filter(":contains('Moderate')").length) { 
      $fieldWarning.addClass("fault-moderate"); 
      $fieldWarning.find(".field-label").addClass("disappear"); 
      $fieldWarning.find(".field-items").addClass("disappear"); 
     } 
    } 
}); 

参考:.find().filter()

+0

ああ、.find()はうまくいった!ありがとうございました。 –

+0

Kool、答えとしてマークしてください。 – ShankarSangoli