我的表格单元格值有一个奇怪的问题。
我的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')
}
})
然而,我似乎无法用我的代码找到它。
这里有任何提示吗?
答案 0 :(得分:1)
$(this).text()
将以某种方式“删除”html标记,但它会将所有字符作为文本保存在节点中。这将包括空格。
根据您的示例,.text()
调用将返回" cell "
(空格 - “单元格” - 空格)或" "
(空格 - 空格) - 如this fiddle所示
确定基于其唯一.text()
值的单元格确实是一个糟糕的选择。尝试mithunsatheesh' answer,或尝试向您的单元格添加一些id
或class
属性,并使用相应的选择器。
如果您提供更多背景信息,也许有人可以给您更合适的答案。
答案 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!');
}
});
答案 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');
}
});