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 changed”这样的事件,那么最好的方法是什么?

4

2 回答 2

0

当所述元素被更改/添加时,触发它们的事件。

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

现在您可以使用委托的事件处理程序来捕获它并更新文本。

$(document).on("changed",".currency",function(){
    $(this).html( myNumberFormatMethod($(this).text()) );
});
于 2013-10-17T20:44:34.330 回答
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 节点创建函数中使用回调,就像其他答案中提到的那样。

于 2013-10-17T21:06:34.567 回答