将DOM节点与“===”进行比较是否安全?

时间:2017-12-07 11:42:23

标签: javascript dom

我的先决条件是,我只使用一个DOM,只使用DOM getElementByIdquerySelectorevent引用。在这种情况下,使用以下条件是否安全

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

检查事件是否已冒泡到文档正文中?

我知道这不适用于克隆对象。但我不会自己克隆任何物体。 DOM API是否在任何地方克隆对象?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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 description