使用"==="运算符比较DOM节点是否安全?

4

我的前提是,我只使用一个DOM和DOM API,例如getElementByIdquerySelectorevent引用。在这种情况下,使用以下条件是否安全?

if (document.body === event.currentTarget) { }

如何检查事件是否冒泡到文档的body?

我知道这对克隆的对象无效。但我没有克隆任何对象。DOM API是否会在其他地方克隆对象?

2个回答

4

是的,这是安全的。浏览器不会替换DOM对象,它们是相当稳定的对象。

我经常使用WeakMaps将数据绑定到元素上,没有问题(example)。


0
这并不是一个直接的答案,因为它已经给出了,而是一个提醒,以防你在项目中已经使用了jQ。对于阅读本文的某些人来说它可能很有用,因为它更短,而且可以在多种方式上更加强大。
jQuery中有一个注意事项,自1.6版本以来,您可以使用is()函数。假设您有:
<div id="parent">
    <p>drek</p>
    <p id="target">kmek</p>
    <div>mrr</div>
</div>

您可以将 jq 选择结果与另一个进行比较:

$("#target").is($("#target"));

你可以将它与 DOM 对象进行比较:
$("#target").is(document.getElementById("target"));

你可以使用回调函数,因为它不会创建新的 jq 对象:

$( "#target" ).click(function( event ) {
  var target = $( event.target );
  if ( target.is( "li" ) ) {
    target.css( "background-color", "red" );
  }
});

你可以在集合上使用它:(如果它至少与集合中的一个元素匹配,则为true):

$('#parent').children().is("p");

可能还有其他一些聪明的用途: API描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接