2015-11-11 136 views
2

我有一个表格填充了来自AJAX调用的数据,并且所有这些数据(包括数字和字符串)都像往常一样插入到td和tr标记中。 我需要用逗号替换十进制数中的所有点,但我不想在每次手动调用“replacewith()”方法。 我认为是这样的:用逗号代替带有数字的表格中的逗号

$(document).ready() { 
    $(#"<tr>").isNumeric().replaceWith('.', ','); 
} 

这样,当页面被充电的jQuery自动检测数字表格单元格,并用逗号替换它们的数量。

我甚至不知道这个想法是否可能......但是,你有什么建议吗?

+0

jQuery实际上有一个'isNumeric() - Function'。你可以在每一行的文本内容上调用它。 – OdaYukimura

+0

但是我想避免的是这样的:把我放在每一行的上下文中......我只想写一次这个函数,并在包含表格的页面的开头调用它 – mifert

+0

选择所有''从表中抽取'$(“yourTable”)。children(“tr”)'并通过它们迭代$ .each()。您想替换' – OdaYukimura

回答

1

无法自动检测元素何时添加到页面。您可以使用AJAX全局事件来检测何时进行AJAX调用并使用定时器等待处理结果,但这意味着您必须检查页面中的每个AJAX调用的所有表格单元格,延迟到细胞得到纠正,并且它仍然不能覆盖所有情况。

手动调用函数是一些额外的工作,但它是最可靠和有效的方法。

您可以使用要处理的元素调用该函数。这样你就不必浏览整个页面中的所有表格单元格。

寻找表格单元而不是表格行。您应该查看单元中的节点,而不是仅仅替换其中的任何内容,否则您将冒险搞乱实际上不是文本的代码部分。要处理嵌套元素,您可以针对非文本节点的任何节点递归调用该函数。

例子:

function fixPeriods(elements) { 
 
    elements.contents().each(function(i, el){ 
 
    if (el.nodeType == 3) { 
 
     if ($.isNumeric(el.data)) { 
 
     el.data = el.data.replace(/\./g, ','); 
 
     } 
 
    } else { 
 
     fixPeriods($(el)); 
 
    } 
 
    }); 
 
} 
 

 
fixPeriods($('#Bjursta td'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<table id="Bjursta"> 
 
    <tr><td>3.14</td><td>4.5<b>2.3</b>1.8</td></tr> 
 
    <tr><td>1.337</td><td>Not a number.</td></tr> 
 
    <tr><td>7.65</td><td>127.0.0.1</td></tr> 
 
</table>

4

试着给你的表类行为,然后使用类似这样的文件准备:

$(function() { 
$('.myTable td').each(function() { 
    if($.isNumeric($(this).html())) { 
    $(this).html($(this).html().replace('.', ',')); 
    } 
}); 
}); 

的jsfiddle这里: https://jsfiddle.net/wtzkbm7n/

+0

这一个看起来更容易! –

+0

我也试过这个,但它仍然不起作用。但问题可能是整个项目,它比我说的更复杂。所以,在这一点上,我会遵循Guffa的建议,并会根据需要调用函数。谢谢大家 – mifert