2011-10-18 31 views
2

我有需要“ontouchstart”属性将被添加到每一个锚,以便有锚的应用程序:活跃的CSS状态在iOS设备上工作。使用jQuery或JavaScript来属性添加到锚DOM已经加载后

问题在于,DOM已经加载后,整个应用程序通过AJAX加载内容,这意味着任何$(selector).attr('ontouchstart','')调用只能在初始屏幕上工作,而不是稍后通过AJAX添加的内容。因为每个屏幕都是由单独的函数加载的(在某些情况下是由函数本身构造的),我想找到一个解决方案,它允许一个适用于所有锚点的jQuery或JavaScript调用,甚至是那些在DOM被加载而不是遍历每个函数,并且单独添加呼叫(其中有数百个)。

这甚至可能吗?任何帮助将不胜感激。

回答

2

你可以尝试DOMNodeInserted事件:

$(document).bind('DOMNodeInserted', function(event) { 
    if (event.target.nodeName == 'A') { 
    $(event.target).attr('ontouchstart',''); 
    } 
}); 

当任何类型的节点添加到DOM本身将触发事件,代码只是测试节点名称(标签),并增加属性。

+0

非常有趣!在每个节点插入上触发事件是否有任何性能问题? – dSquared

+0

我读过,JS突变事件(这是其中之一)确实有性能损失,确实是Mozilla的全面[阻止他们使用(https://developer.mozilla.org/en/Extensions/Performance_best_practices_in_extensions#section_8),他们'[在DOM级别3中弃用](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted)...但是您可能会放弃使用它取决于您的应用程序的复杂程度。如果可以:-),最好的办法是运行基准测试。我只是想把它作为可能的替代品 – Clive

+0

谢谢;这绝对是最好的选择......我只需要看看关于表现处罚=) – dSquared

2

尝试使用livedelegate事件侦听器。这些都与在onload事件之后添加的DOM元素一起工作。

+0

我已经在过去使用$ .live(),但它是我的理解,这是事件的具体。我会在上面列出的情况下使用什么事件? – dSquared

+0

再读一遍,听起来好像你并没有等待任何事件(或者AJAX电话就是事件)。据我所知,你不能设置“未来”元素的属性。每次调用Ajax之后,您都必须添加该属性。 –

相关问题