jquery动态添加html标签属性

发布时间:2020-05-27编辑:脚本学堂
jquery动态添加html标签属性的方法,动态添加自定义标签属性,在对所有td做国际化时,发现有被重复国际化的现象,分享下解决方法。

由于用到国际化,且使用jquery.numberformatter-1.1.3.js类库。
在对所有td做国际化时,发现有被重复国际化的现象。

国际化方法:
 

i18_data("#peerTable tr td","${i18("jquery-numberformatter.local")}");即testTable 表的所有td将被国际化。

问题:
调用上述方法对A表的列进行国际化后,再次调用上述方法对B表进行国际化时,发现会再次国际化A表的列后再国际化B表的列,这就导致A表被国际化两次,出现数据错误。
经过仔细定位,还是没能找到为什么会再次国际化A表的原因,因此无法修复该问题。
有可能是类库的bug。

解决办法:
为了防止被调用两次,只能做一个标识,标识td已经被国际化。
就动态的给每个被格式化的td加了一个随意的属性hf,方法:
table:
 

复制代码 代码示例:
<table id="peerTable" class="r_table2 text2 print97" >
<tbody>
<tr class="hr">
<td colspan="8"></td>
</tr>
......

调用:

i18_data("#peerTable tbody tr td","${i18("jquery-numberformatter.local")}");

方法实现:
 

复制代码 代码示例:

numberFormat.js
var regFilterDate = /^[0-9]{1,4}-[0-9]{1,4}-[0-9]{1,4}$/;
var startZero = /^0[1-9]/;
function i18_floatdata(jquery_path,locale,config){
if(null==config){
config={format:"#,###.00",locale:locale};
}
$(jquery_path).each(
function(){
var v = $(this).text();
if(startZero.test(v)){
return;
}
if(parseFloat(v) || parseFloat(v) == 0){
$(this).format(config);
}
}
);
}
function i18_data(jquery_path,locale,config){

$(jquery_path).each(
function(){
i18FormatData(this,locale,config);
}
);
}
function i18FormatData(formartObj,locale,config,spcDecimalNumber)
{
var value = $(formartObj).text().replace(/n(s*$)/g, "");
value = value.replace(/(^s*)|(s*$)/g, "");
if(regFilterDate.test(value))
{
return;
}
if(parseFloat(value) ==0 || parseFloat(value)){
var bool = false;
if(startZero.test(value))
{
return;
}
if(value >0)
{
bool = parseInt(value)-value <= 0 && (parseInt(value)+"").length != value.length;
}
else if(value < 0)
{
bool = parseInt(value)-value >= 0 && (parseInt(value)+"").length != value.length; 
}
 
var hf = $(formartObj).attr('hf');
if(null == hf || undefined == hf)
{
if(bool){
if(spcDecimalNumber == undefined || null == spcDecimalNumber)
{
config={format:"#,###.00",locale:locale};
}
else
{
config={format:"#,###.0000",locale:locale};
}
$(formartObj).format(config);
}else{
config={format:"#,###",locale:locale};
$(formartObj).format(config);
}
$(formartObj).attr('hf',true);
}
}
}
// 自定义属性:
var hf = $(this).attr('hf');
if(null == hf || undefined == hf)
{
 //执行国际化
 $(this).attr('hf',true);//设置标识已被国际化。
}
 

备注:可以用JS动态添加html任何标签的自定义属性