2012-07-28 54 views
28

我使用下面的函数改变一列填充我的形式:我可以同时使用多个元素类型的jQuery find()吗?

function padTitles() { 
    $('#option-grid #dataTable tr, #topic-grid #dataTable tr') 
     .each(function() { 
      var tds = $(this).find('input'), 
     text = tds.filter('[id^="input_TempRowKey_"]').val(), 
     tdToPad = tds.filter('[id^="input_Title_"]'), 
     pad; 
      if (/\.0$/.test(text)) { 
       pad = 10; 
       level = 1; 
      } else { 
       pad = 35; 
       level = 2; 
      } 
      tdToPad.css('margin-left', pad); 
      a = tdToPad.closest('tr'); 
      if (tdToPad.closest('tr').get().className) { 
       tdToPad.closest('tr').get().className = tdToPad.closest('tr').get().className.replace(/\blevel\-.*?\b/g, 'level-' + level); 
      } else { 
       tdToPad.closest('tr').addClass('level-' + level) 
      } 
     }); 
} 

它非常适合这种形式的HTML:

<td id="title_1" class=" "> 
    <input type="text" value="Tests" name="item.Title" id="input_Title_1" > 
</td> 

现在我也想它的工作下面的HTML:

<td id="title_1" class=" ">  
    <textarea name="item.Title" id="input_Title_1">Tests</textarea> 
</td> 

有没有一种方法,我可以改变这个功能,所以它适用于任何一个inputtextarea?我假设这样做的方式是更改var tds = $(this).find('input'),但是我不知道如何更改它,或者即使可以更改为“查找”textarea或输入。

回答

77

使用逗号联合多个查询:

var tds = $(this).find('input, textarea'); 

您还可以使用:input作为一个选择,但它的效率不高,也可能包括一些事情,你宁愿不包括。

0

您可以使用.children()选择td的孩子不管它是什么

var tds = $(this).children(); 
0

你不能用相同的id添加textareainput。它不正确。 id's对于单个html元素是唯一的。

我建议你改为class

<input type="text" value="Tests" class="myclass" name="item.Title" id="input_Title_1" > 

    <textarea name="item.Title" class="myclass" id="input_Title_2">Tests</textarea> 

var tds = $(this).find('.myclass') 
+1

一种形式使用textarea,另一种使用输入。对不起,我应该提到它有两种不同的形式。 – Alan2 2012-07-28 05:26:25

+1

如果两个表单都在同一页面中,则它仍然无效。 – Jashwant 2012-07-28 05:39:40

相关问题