调用$时,DOM的事件发生了变化或挂钩?

时间:2013-10-17 20:40:41

标签: jquery events dom

我想通过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”那样的事件,那么最好的方法是什么呢?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分: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节点创建函数中使用回调,如其他答案中所述。