2012-07-28 9 views
28

Sto usando la seguente funzione per modificare l'imbottitura in una colonna sulla mie forme:Posso usare jQuery find() per più di un tipo di elemento allo stesso tempo?

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) 
      } 
     }); 
} 

funziona bene per questo modulo HTML:

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

Ora vorrei anche lavorare per il seguente codice HTML:

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

c'è un modo per cambiare questa funzione in modo che funziona sia per una input o textarea? Presumo che il modo per farlo è quello di cambiare var tds = $(this).find('input'), ma non sono sicuro di come cambiarlo o anche se è possibile passare a "trovare" una textarea o un input.

risposta

77

utilizzare una virgola per sindacali più query:

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

È inoltre possibile utilizzare :input come selettore, ma non è così efficiente e può anche includere alcune cose che non preferisce includi.

0

È possibile utilizzare .children() per selezionare la td s bambino qualunque cosa sia

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

Non è possibile aggiungere un textarea con lo stesso id come input. Non è corretto. id's sono univoci per un singolo elemento html.

Ti suggerisco invece 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

Una forma utilizza un'area di testo un'altra utilizza un input. Mi dispiace avrei dovuto dire che sono due diverse forme. – Alan2

+1

Se entrambi i moduli si trovano nella stessa pagina, non sono ancora validi. – Jashwant

Problemi correlati