我想听方法调用。
例如,当一个元素被任何东西附加到文档中时,我希望传递该元素以对其进行操作,例如:
//某处
aParent.appendChild(aChild);
//当前者,我定义为侦听器的函数以aChild
作为参数调用
有人知道怎么做吗?
答案 0 :(得分:1)
不知道核心功能是否可行,但您可以随时为要监控的操作创建自己的功能:
function AppendChild(oParent, oChild) {
// your stuff on oParent
// append oChild
oParent.appendChild(oChild)
}
或者,也许修改实际的appendChild(),但这很棘手......
答案 1 :(得分:0)
我知道Dojo Toolkit提供了这项功能。您可以解释here - 跳转到“将功能连接到另一个”部分。如果您有兴趣,可以查看the source of dojo.connect以查看正在发生的事情。
答案 2 :(得分:0)
在Firefox中,您可以重写Node .prototype.appendChild来调用您自己的函数(首先保存原始的appendChild,然后在其中调用它)以执行其他操作。
Node.prototype._appendChild = Node.prototype.appendChild;
Node.prototype.appendChild = function myFunct(el){....; this._appendChild(el);}
Internet Explorer没有实现这些接口(但可能有一种解决方法,可能使用.htc ..)。 IE8将使用Element而不是Node。
答案 3 :(得分:0)
您所描述的是Aspect Oriented programming。在AOP用语中,您的“连接点”将是element.appendChild(),您的“建议”是您希望在每个匹配连接点执行之前(之前和/或之后)执行的函数。
我一直对JavaScript AOP的可能性感兴趣,我刚刚发现这个Aspect Oriented Programming and javascript,看起来很有希望而不需要采用一个大的旧API。 - 我很高兴你提起这件事。我有这方面的用途,如临时日志记录,计时代码段等。
答案 4 :(得分:0)
多个浏览器以不同的方式处理DOM,不幸的是,IE处理事物的方式并不像Mozilla那样强大。最简单的方法是使用像Filini提到的自定义函数。
但是,您也可以将不同的浏览器DOM对象包装在一个外观中,并将其用于所有元素访问。这是一项更多的工作,但您可以以相同的方式处理所有浏览器,并能够轻松添加/删除侦听器。我不确定它是否比自定义函数更有用,但值得一看。