在Javascript

时间:2016-01-09 13:02:31

标签: javascript

我们说我们有这个HTML代码:

<body>
   <div>Some text</div>
   <div>Some other text</div>       
</body>

我有一个克隆元素或一组元素的克隆函数(我正在尝试制作的东西),我们调用这样的函数:

clone( 'div' );

因此HTML变为:

<body>
   <div>Some text</div>
   <div>Some other text</div> 
   <div>Some text</div>
   <div>Some other text</div>       
</body>

克隆部分很简单,问题是在调用函数之前应用于divs的任何事件侦听器的继承。我的想法是每次在对象中添加事件监听器时存储事件函数,可能是这样的:

evtList = [
     { elem: elemObject, type: eventType, handler: function },
     ...
     ...
];

然后每次我克隆一个节点时,我只检查是否有一个&#34;等于&#34; evtList中的node(元素)所以我可以添加相同的事件监听器。这是真正的问题。当我尝试使用&#34; ===&#34;检查相等性时我每次都弄错了。我做了一些搜索,我发现node.isEqual(cloneNode)但不再支持了。有没有办法确定两个节点(元素)是否等于&#34;? (当然是纯粹的javascript)

修改

我创建了一个函数isEq()来检查两个对象是否相等(深),它似乎适用于我尝试的任何文字对象。但是,我注意到一种奇怪的行为:

isEq( $('div')[0], $('div')[0] );           // Returns False
isEq( $('div').first(), $('div').first() ); // Returns True

知道isEq()为什么会这样做?

1 个答案:

答案 0 :(得分:0)

  1. 你开始重建jquery的重要部分;这毫无意义。他们已经做到了这一点,并解决了你遇到的所有问题。

  2. DOM-Nodes是常规的Javascript对象。您可以像任何其他JS-Object一样引用它们,并且标识将始终匹配。

  3. 所以你必须告诉我们出错的部分,以获得帮助。