3 votes

jQuery ne trouve pas les entrées dans les cellules de tableau

J'ai un problème étrange avec la valeur des cellules de mon tableau.

Mon HTML est comme :

<table>
   <tr>
      <td> celll </td>
      <td> celll </td>
      <td> celll </td>
   </tr>
   <tr>
      <td> celll </td>
      <td> <input type='text'> </td>
      <td> <input type='text'> </td>
   </tr>
</table>

Je veux remplacer la cellule qui a input étiquette.

Donc je :

 $('table').find('td').each(function(){
      if($(this).text()==''){
          console.log('found input')  

      }
  })

Cependant, je n'arrive pas à le trouver avec mes codes.

Des conseils ?

1voto

LeGEC Points 7199

$(this).text() supprimera en quelque sorte les balises html, mais conservera tous les caractères présents sous forme de texte dans vos nœuds. Cela inclut les espaces blancs.

Avec votre exemple, le .text() l'appel retournera " cell " (espace - "cellule" - espace) ou " " (espace - espace) - comme indiqué dans ce violon .

Identifier une cellule sur la base de sa sole .text() La valeur est un mauvais choix en effet. Essayez réponse de mithunsatheesh ou essayer d'ajouter des id o class à votre cellule, et utilisez le sélecteur approprié.

Si vous donnez plus de contexte, peut-être que quelqu'un pourra vous donner une réponse plus appropriée.

1voto

Connor Points 7403

Oui, les autres ont raison, le text renvoie probablement quelques espaces.

Vous pourriez vous faciliter la vie et utiliser a.

$('td').has('input');

ou s'il est possible que les autres éléments aient aussi une entrée, vous pourriez faire ceci

$('td').has('input').filter(function(){
   return $(this).children() === 1;
}); 

Ou si vous voulez vous en tenir à votre text vous pouvez couper les espaces blancs

$('td').each(function(){
   if( $(this).text().replace(/\s/g, '') === '' ) {
      console.log('Input found!');
   }
});

Démonstration : http://jsfiddle.net/ck6zn/

0voto

Hashem Qolami Points 22990

$.text() obtient le contenu textuel combiné de chaque élément et renvoie également tous les espaces blancs ou les nouvelles lignes.

Vous pouvez donc couper la chaîne en utilisant $.trim méthode :

$('table').find('td').each(function() {
  if($.trim($(this).text()) === ''){
    console.log('found input');  
  }
});

JSBin Demo

Mise à jour

Une autre option serait d'utiliser .find() comme dans l'exemple ci-dessous, MAIS selon mon Test JSPerf en utilisant jQuery 1.8.x ce qui a un inférieur performance :

$('table').find('td').each(function() {
  if($(this).find('input').length){
    console.log('found input');  
  }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X