2011-07-05 13 views
1

私はJqueryを学習しています。私は解決策を見出し、熟練したベテランがそれをどうやって行うのかを見たいと思っています...もっと雄弁があれば、話すことができます。Jquery親子セレクタの改善

問題は、テーブル行にあるウィジェットがあることです。ウィジェットは他のすべての20ウィジェットと同じクラスを持っています。特定のウィジェットをクリックすると、そのウィジェットだけが変更されます。ここで

はHTMLです:

<div class="deal-widget"> 
    <div class="deal-widget-left"> 
    <div class="deal-widget-left-countdown"> 
     <span class="totalcoupons">500</span> of <span class="maxcoupons">500</span> 
    </div> 
    <div class="deal-widget-left-remain"> 
     Remaining 
    </div> 
    </div> 
    <div class="deal-widget-right is_open"> 
    <a href="/deal/claim/1113" class="deal-link">Claim It!</a> 
    </div> 
</div> 

ここではJQueryで私の刺しです:

Drupal.behaviors.plusone = function (context) { 
    $('a.deal-link:not(.deal-processed)', context).click(function() { 
    var parent = $(this).parents('div.deal-widget'); 
    var originalVote = parent.children('div.deal-widget-left').children('div.deal-widget-left-countdown').children('span.totalcoupons').text(); 
    var originalVoteInt = parseInt(originalVote); 
    var voteSaved = function (data) { 
     parent.children('div.deal-widget-left').children('div.deal-widget-left-countdown').children('span.totalcoupons').html(originalVoteInt - data.total_votes); 
     parent.children('div.deal-widget-right').html(data.voted); 
     parent.children('div.deal-widget-right').removeClass('is_open').addClass(data.votedClass); 
    } 
    $.ajax({ 
     type: 'POST', 
     url: this.href, 
     dataType: 'json', 
     success: voteSaved, 
     data: 'js=1' 
    }); 
    return false; 
    }) 
    .addClass('deal-processed'); 
} 

は、これよりもクリック-時にオブジェクトに子供の親その後、第2のセットを選択する良い方法はあります?

おかげ

ジョー

答えて

2

私が使用してお勧め:

var parent = $(this).closest('div.deal-widget'); 
var originalVote = parent.find('span.totalcoupons').text(); 

提供セレクタに一致する最初の要素の祖先要素を検索しclosest()find()は、指定されたセレクタに一致する子孫要素を検索します。

closest()一方戻る一方のみ一致(最も近い/* *最初のセレクタに一致する要素)はfind()は複数の要素を返すことができることに注意することが重要です。


参考文献:

+0

.closest()魔法のように動作します! diffメソッドをありがとう。私はそれを使用しています。 - Joe –

+0

あなたは大歓迎です!私は助けてくれることを嬉しく思っています。)これ、または別の回答があなたの問題を解決した場合は、受諾(回答の隣のチェックマークをクリック)または投票のアップ(左上の矢印をクリック) 。それは義務ではありませんが、コミュニティによって高く評価されています。 –

+0

チェックマークをクリックして緑色に変わった。私は投票のステータスをまだ得られていない。しかし、私は....ジョー –

1

find()を使用しますか?だから、:

var originalVote = parent.children('div.deal-widget-left').children('div.deal-widget-left-countdown').children('span.totalcoupons').text(); 

は次のようになります。

var originalVote = parent.find('span.totalcoupons').text(); 

私はあなたがここに探している正確にわからないんだけど...

関連する問題