2013-04-27 20 views
0

我的HTML如下:A類父:jQuery的:獲取使用通配符

<div class="row side cards-row-1 cards-row"> 
    <a href="#" class="card cards-front"> Text </a> 
</div> 

<div class="row side cards-row-2 cards-row"> 
    <a href="#" class="card cards-front"> Text </a> 
</div> 

<div class="row side cards-row-3 cards-row"> 
    <a href="#" class="card cards-front"> Text </a> 
</div> 

我需要當用戶點擊一個鏈接,拿,卡行的數值。

我認爲最好的辦法是使用jquery parent選擇器和wildcard選擇器。

這是我的jQuery代碼:

(function($) { 
    $(document).ready(function() { 
     "use strict"; 
     $('.cards-front').click(function(e) { 
      e.preventDefault(); 
      $('.cards-row').removeClass('cards-expand'); 
      var classes = $(this).parent().attr("[class^=card-row-]"); 
      alert(classes); 
      $(this).parent().addClass('cards-expand'); 
      $(this).insertAfter('<div class="cards-shadow"></div>'); 
     }); 

     $('.cards-back .close').click(function() { 
      $('.cards-row').removeClass('cards-expand'); 
      $('.cards-shadow').remove(); 
     }); 

    }); 

})(jQuery); 

我使用alert classes檢查已被抓獲的號碼。 然而,而不是捕捉價值,它只是說undefined

I have a JS Fiddle here.

我不知道我做錯了,並希望任何指針。謝謝!

回答

2

你的選擇是錯誤的,如果你要檢索的類名,你需要做的:

var classes = $(this).parent().attr("class"); 

如果你只是想後cards-row-,不信,你可以使用這個正則表達式的數量:

var classes = $(this).parent().attr("class").match(/cards-row-(\d+)/); 

但實際上,你可以在這種情況下使用index()

var classes = $(this).parent().index() + 1; 

由於index()值是0型,因此需要通過1增加它得到正確的值

Updated Fiddle

+0

感謝完美的作品。但是,我不明白:+1與什麼有關?例如,在「行側卡 - 行1卡 - 行」中,「卡行-1」是第二個值。所以,當你使用+1時,Jquery如何知道如何選擇「cards-row-1」而不是「side」? – 2013-04-27 11:04:51

+0

@big_smile這個方法不會選擇類名,而是你的div的'index'。 – Eli 2013-04-27 11:08:23

+0

請注意,如果您的div格式不正確,您獲得的編號將會錯誤。 [示例](http://jsfiddle.net/Spokey/nSzer/4/) – Spokey 2013-04-27 11:09:32

1
var classes = $(this).parent().attr("class"). 
     match(/cards-row-(\d)/)[1]; 

請參閱fiddle編輯。

0

更簡單的方法是剝離字母,只留下數

var classes = $(this).parent().attr('class').match(/\d+/g);