1

私はここ数日、これについて頭を悩ませてきました。誰かが助けてくれることを願っています。基本的にこれが私が持っているものです...

<div id="ORDER/SUB/DD" class="box1">content</div>
<div id="ORDER/GIFT/CC" class="box1">content</div>
<div id="ORDER/SUB/CC" class="box1">content</div>

<div id="ORDER/GIFT/CC/1" class="box2">content</div>

ただし、すべてのbox1IDは動的に作成されます。必要なのは、idがdivの中chosenOfferにあるdivに新しいクラスを追加することです。したがって、次のようになります...box1box2

<div id="ORDER/SUB/DD" class="box1">content</div>
<div id="ORDER/GIFT/CC" class="box1 chosenOffer">content</div>
<div id="ORDER/SUB/CC" class="box1">content</div>

<div id="ORDER/GIFT/CC/1" class="box2">content</div>

divには、いくつかの余分な文字(例のスラッシュと数字など)を除いて、常にdivのbox21つと一致するIDがあります。box1どんな助けでも大歓迎です!

4

3 に答える 3

2
$('.box1').each(function(){
  var id = this.id;
  var $match = $('.box2[id*="'+id+'"]');

  if($match.length){
    $(this).addClass('chosenOffer');
    return false; // You can stop checking .box1's now
  }
});

デモ:http://jsfiddle.net/2pcVa/

説明:

を調べて、現在のボックス.each()のIDを含む.box1を見つけることができるかどうかを確認しています。 が存在する場合は、クラスを現在のクラスに追加します。これは、一致するものがすでに見つかっているため、残りの'を調べる必要がないことを意味します。.box2
$match.box1return false;.box1

CSSの属性セレクターの機能を使用しています(jQueryも同じものを使用しています)。*=は「含む」という意味です。
クリス・コイエはここにそれらについての良い記事を書きました:http: //css-tricks.com/attribute-selectors/

于 2013-03-20T00:04:07.423 に答える
2

ahrenの応答とほとんど同じですが(最初の一致する要素を見つけた後にループが終了することで改善されます)、IDを一致させるために正常に機能する古い学校の「indexOf」を使用します。

$.each($('.box1'), function() {
  if ($('.box2').attr('id').indexOf(this.id) >= 0) {
    $(this).addClass("chosenOffer");
    return false;
  }
})
于 2013-03-20T01:13:00.120 に答える
-1

これは確かに実行可能ですが、最も簡単/最も堅牢/スケーラブルなアプローチを使用しているかどうかはわかりません...

私がすることは、新しい属性を使用し、対応するアイテムにそれを設定することです。これにより、長期的にははるかに管理しやすく、編集しやすくなります。

http://www.w3schools.com/jsref/met_element_setattribute.asp

于 2013-03-20T00:13:19.490 に答える