2011-11-23 43 views
0

我有一个表,需要一些自定义主题。它有很多文本输入,它们都需要自定义宽度。我想根据每个字段的标签名称简单地添加自定义CSS类是很好的。我是那里的一部分,但由于某种原因,我为表格中的任何给定标签拾取所有标签名称,而不是我所希望的最接近的标签名称。JQuery添加类与最接近的标签的名称

这里是我的JQuery:

$('td.label-text', this).each(function() { 
// add class with name of the label text 
$('td.input-text').addClass($(this).text().replace(/[^a-z]/gi,'').toLowerCase() + ' ').closest("td.label-text"); 
}); 

下面是一些示例HTML输出:

<tr> 
<td class="label-text">Rule Name*:</td> 
<td class="input-text effectivedate rulename employeeid createrulefor ipaddress active searchby"> 
<input type="text" name="ruleName" value=""> 
</td> 
</tr>  

<tr> 
<td class="label-text">Employee ID:</td> 
<td class="input-text effectivedate rulename employeeid createrulefor ipaddress active searchby"> 
<input type="text" name="employeeId" value="" id="empnotext"> 
</td> 
</tr> 

正如你所看到的所有的标签名都被添加到每个TD。输入文本类,而不是最近的(最近的)一个。我确信我做错了什么,但不知道是什么。

我也想知道如果一个类可以根据输入名字

+0

你是什么意思“我也想知道如果一个类可以根据输入名字被添加”呢? – JesseBuesking

回答

2

你必须使用this在循环中被加入。目前,您正在选择所有具有选择器td.input-text(每次迭代)的元素。小提琴:http://jsfiddle.net/WCTyz/2/

$('td.input-text input', this).each(function() { 
    // add class with name of the label text 
    var $this = $(this); 
    var addclass = $this.parents("tr:first").children("td:first") 
          .text().replace(/[^a-z]/gi,'').toLowerCase(); 
    $this.addclass(addClass); 
}); 

此外,addClass方法自动分隔空间的交易。您不必手动用空格后缀名称。

选择的说明:

td.input-text input  For each <td class="input-text"> ???? <input> ??? </td> : 

Get class name: 
.parents("tr:first") Select the current row 
.children("td:first") Select the first cell 
.text()     Get the textual value 
+0

这是唯一的作品,但它将类添加到.label-text类(第一个td)而不是.input-text td。但是我越想到它,我的逻辑可能有缺陷,因为有时每个标签有多个输入。所以也许在基于输入名称=“somename”的同一个td中添加一个类?谢谢。 –

+0

其实我的意思是添加一个类到输入的权利,所以如果它是'input name =“somename”',添加一个基于它的类,所以它'输入名称=“somename”class =“somename”' –

+0

感谢罗布,但它似乎没有添加一个类到输入字段。我想也许你的选择是不对的'tr:第一个'?我尝试过'td:first',但那也行不通。 –