2013-10-17 58 views
1

我想通過JavaScript格式化貨幣,這樣我。即「5.99」變成「5,99€」。我想我能做到這一點通過給包含貨幣一類特殊的元素和使用jQuery選擇器來找到這些元素和內容格式化,像:

<!-- ... --> 
<td class="currency">5.99</td> 
<!-- ... --> 

// ... 
$(".currency").each(function(index, element) { 
    element.html(myNumberFormatMethod(element.text())); 
}); 
// ... 

把給定的JavaScript代碼插入的jQuery的onload方法元素工作正常當從服務器接收到頁面時,它已經存在於DOM樹中。但是我也需要該函數在具有給定類的元素動態創建時執行。不幸的是,沒有像「dom改變」這樣的事件,那麼做到這一點的最好方法是什麼?

+0

爲什麼不在創建元素後應用相同的操作? –

+0

元素究竟是如何改變 – megawac

+0

元素在不同的地方發生了變化,所以我將不得不在任何地方更新代碼我更新元素,這就是爲什麼我要檢測元素更改/創建時的原因 – Subsurf

回答

0

當所述元素被改變/添加時,在它們上觸發事件。

$("#sometable").append(newRowWithCurrency).find(".currency").trigger("changed"); 

現在您可以通過委託事件處理程序捕獲並更新文本。

$(document).on("changed",".currency",function(){ 
    $(this).html(myNumberFormatMethod($(this).text())); 
}); 
+0

我最終這樣做了這個方式,不完全是我想要的,但它的工作原理:) – Subsurf

0

爲了記錄,可以檢查是否在dom中創建元素。但瀏覽器支持不好(IE有問題)。

我做了一個示範的jsfiddle DOMNodeInserted

http://jsfiddle.net/kasperfish/AAd8f/1/(可能無法在IE瀏覽器)

此外,如果要素(新幣值)通過添加了Ajax,叫你也可以使用$ .ajaxSetup定義一個成功的標準回調函數。

$.ajaxSetup({ 
    beforeSend: function() { 
     // standard stuff that has to be done before every ajax call 
    }, 
    complete: function(xhr, stat) { 
     // standard stuff that has to be when complete 
    } 
    success: function(result,status,xhr) { 
     // standard stuff that has to be done when success: in your case add currency symbols 

    } 
}); 

但是,最好的選擇可能是在dom節點創建函數中使用回調,就像在其他答案中提到的一樣。

+0

我將在稍後更新我的應用程序中使用此方法 – Subsurf

相關問題