2017-04-06 29 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

谢谢,我使用了您提供的第二个选项,它解决了我的问题 –