2012-01-05 227 views
0

我有一個表頭單元格,同時具有格式和功能類別,像這樣的一些類:如何選擇只有一個元素

<th class="persistent optional some-other-classes"> 

我想持續可選複製到所有下表細胞,但具有選擇適當的類

我想這是一個困難時期,但它不會讓我在任何地方......

$('th, TH').filter('.persistent, .optional') 

有沒有辦法只抓住這兩個班,而沒有參考一些其他類的名稱?

感謝您的幫助!

編輯:更多信息
項目將有超過3類。我只是想複製/粘貼的執着和可選的類,它處理表的外觀,並留下格式類

它應該是這樣的:

$('th, TH').attr(class).filter('.persistent, .optional') 

不,當然工作。

+1

你指的是具有* both *類的物品,不包括僅包含其中之一的物品? – 2012-01-05 10:11:13

+0

我需要將** persistent **和** optional **複製到下面的所有表格單元格。所以我的選擇必須是「選擇與永久和可選匹配的所有th類。希望已經夠清楚了。 – frequent 2012-01-05 10:14:29

+0

@通常很清楚,你想最終得到的元素只有** **'可選'(如果存在)和'持久'(如果存在)類。正確? – Viruzzo 2012-01-05 10:40:41

回答

0

很多插手之後,這是我的解決方案,它的工作原理:

var classes = "", 

    allClasses = th.attr("class").split(/\s+/); 

    for (var j = 0; j < allClasses.length; j++) { 
      if (allClasses[j] === 'persistent' || allClasses[j] === 'optional') { 
      classes = classes+" "+allClasses[j] 
      } 
    } 

    console.log(classes) 
    // returns "persistent optional" or "persistent" or "optional" 
    // leaves away all other classes 

如果有更簡單的方法來過濾這兩個班級,我會很樂意將答案給予某人。

感謝您的所有努力,並遺憾地沒有準確地告訴我需要什麼。

+0

我已經更新了我的答案,根據我認爲你的要求是什麼,*希望*比上面簡單。 – 2012-01-05 15:16:39

0

只選擇類持久性和可選的元素,試試這個:

$('th[class="persistent optional"], th[class="optional persistent"]') 

它不會工作,它會有更多的空間。如果您需要處理這樣的情況下傳遞函數的過濾器:

$('th').filter(function(){ 
    return this.className.match(/^\s*(persistent\s+optional|optional\s+persistent)\s*$/); 
}) 
+0

我想我的問題不夠精確。我需要提出一個包含類名「持久」和「可選」但不包含任何其他類的選擇。 – frequent 2012-01-05 10:25:18

+0

我編輯了答案。現在它應該更準確。 – Krzysztof 2012-01-05 10:52:38

0

對於路口你需要filter('.persistent.optional'),沒有空間沒有逗號。

+0

看到我上面的評論。我需要得到一個只包含persisten和可選的選擇。 – frequent 2012-01-05 10:26:03

1

下面將匹配要麼類th元素:

$('th.persistent, th.optional'); 

或匹配同時具有th元素:

$('th.persistent.optional'); 

或者,得到的僅具有持續性的一類元素只有可選只有兩個:

$('th.persistent, th.optional').filter(function() { 
    var classes = this.className.split(/\s+/); 
    return classes.length == 1 || (classes.length == 2 && $(this).is('.persistent.optional'); 
}; 

更新

好吧,我想我明白你的要求了 - 如果一個表頭是.optional列中的所有td元素也應該有.optional類,同樣爲.persistent

$('th.persistent, th.optional').each(function() { 
    var th = $(this); 
    var col = th.parent().children().index(th); 
    th.closest('table').find('td').each(function() { 
    var td = $(this); 
    if (td.parent().children().index(td) === col) { 
     if (th.is('.persistent')) td.addClass('persistent'); 
     if (th.is('.optional')) td.addClass('optional'); 
    } 
    }); 
}); 
+0

正確。看起來不錯。謝謝! – frequent 2012-01-05 19:11:49

0

您可以使用addClass()方法將類名稱分配給一組先前匹配的元素:

$("th").addClass("persistent optional") 
0

我已經創建了一個jsfiddle來選擇只包含指定類的項目。

http://jsfiddle.net/hYgqS/

這裏是樣本HTML

<div class="a1 a2 b"> 
1 
</div> 
<div class="a1 a2"> 
2 
</div> 

這裏是JS代碼

$('div.a1.a2').filter(function(){ 
return $(this).attr('class').split(' ').length ==2 
}).text("this one");