2017-04-06 30 views
0

我有一個點擊的TD當找到個是直接在它上面並改變它的寬度應該採取同樣的jQuery不同的選擇有不同的行爲

之前我沒有一類的功能我TD和TH所以我使用這個選擇器

var selectedTh = $this.closest('table').find('th').eq($this.index()); 

它的工作完美,並改變了寬度,因爲它應該。

現在我想重構,所以我對td和th(特定類爲每列)一類 - 我試圖用這個選擇

var selectedTh = $('th',$(this).attr('class')); 

,當我調試它,我敢肯定它是選擇我想 的日,但之後當我做

var tableWidth = $('table').width(); 
       var colWidth = tableWidth/$('th', $table).length; 
       selectedTh.addClass("fullWidth"); 
       selectedTh.animate({ 
        width: colWidth + 100 
        }, 150); 

它什麼都不做

只是爲了澄清,我通過查找它的類不TH我將其添加的全角是之前設置的類,並在那裏存在。

當我正在使用前選擇是否正確地

改變它任何想法,我怎麼可以使用選擇器選擇由類正確個元素?

+1

試試這個'var selectedTh = $('th','。'+ $(this).attr('class'));'你缺少'.'代表 – prasanth

+4

這真是**很難在沒有HTML的情況下幫助你。 –

+0

請點擊''''創建[mcve] – mplungjan

回答

2

$(this).attr("class")將返回元素,它的全class屬性:

  1. 中可能存在多個類
  2. 不會有.,表明它是一個類選擇

因此,沒有,他們不會做同樣的事情。此外,第二個在內查找具有給定類的元素,如果thistd,則該元素在10之內尋找th

你可能最好關閉你所擁有的東西,但如果你擔心colspans或類似的,如果添加一個公共類的tdth保證該td只有一類,你可以這樣做:

var selectedTh = $this.closest('table').find('th.' + $this.attr("class")); 

或者是更好的,一個data-th-class屬性添加到td做:

var selectedTh = $this.closest('table').find('th.' + $this.attr("data-th-class")); 

...以便您可以將其他類添加到td而不會打破它。

+1

謝謝,我使用了您提供的第二個選項,它解決了我的問題 –