jQuery没有在表格单元格中查找输入

时间:2013-08-23 20:13:04

标签: jquery html

我的表格单元格值有一个奇怪的问题。

我的HTML就像:

<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>

我想替换包含input标记的单元格。

所以我:

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

      }
  })

然而,我似乎无法用我的代码找到它。

这里有任何提示吗?

3 个答案:

答案 0 :(得分:1)

$(this).text()将以某种方式“删除”html标记,但它会将所有字符作为文本保存在节点中。这将包括空格。

根据您的示例,.text()调用将返回" cell "(空格 - “单元格” - 空格)或" "(空格 - 空格) - 如this fiddle所示

确定基于其唯一.text()值的单元格确实是一个糟糕的选择。尝试mithunsatheesh' answer,或尝试向您的单元格添加一些idclass属性,并使用相应的选择器。

如果您提供更多背景信息,也许有人可以给您更合适的答案。

答案 1 :(得分:1)

是的,对方是对的,text可能会返回几个空格。

你可以让你的生活更轻松,并且使用了。

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

或者如果其他元素也可以输入你可以做到这一点

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

或者,如果您不想坚持使用text方法,可以修剪空白

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

演示:http://jsfiddle.net/ck6zn/

答案 2 :(得分:0)

$.text()方法获取每个元素的组合文本内容,它还将返回所有空格或换行符。

因此,您可以使用$.trim方法修剪字符串:

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

<强> JSBin Demo

更新

根据我的 JSPerf test ,使用 jQuery 1.8,另一种方法是再次使用.find()方法作为示例, BUT .x ,这有更低的效果:

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