当前位置: 首页 > 知识库问答 >
问题:

javascript - 这里使用parentNode好?还是parentElement好?

孟俊晖
2024-01-24

这里使用parentNode好?还是parentElement好?

这是bootstrap中的一段代码,用来查找一个元素的祖先元素中所有匹配selector的元素。
我觉的应该使用parentElement更合适一些。

  • closetElement上一的一个方法。
  • 要查找的应该是Element,而不是像Text,Comment这样的Node

当然这里使用parentNode也是可行的,一般会返回一个Elment,因为可以包含其他元素的一般都是Element

// bootstrap/js/src/dom/selector-engine.js  parents(element, selector) {    const parents = []    let ancestor = element.parentNode.closest(selector)    while (ancestor) {      parents.push(ancestor)      ancestor = ancestor.parentNode.closest(selector)    }    return parents  },

共有2个答案

乔伯寅
2024-01-24

主要是还可能是这个吧。

parentNode 是指定节点的父节点。一个元素节点的父节点可能是一个元素(Element)节点, 也可能是一个文档(Document)节点,或者是个文档碎片(DocumentFragment)节点。

image.png

  • Node.parentNode - Web API 接口参考 | MDN
缑高朗
2024-01-24

这是一个很好的问题,关于在JavaScript中parentNodeparentElement的选择。首先,让我们了解这两个属性的区别:

  • parentNode: 这是一个标准的DOM(文档对象模型)属性,它返回节点的父节点。这意味着它会考虑所有类型的父节点,包括元素节点、文本节点、注释节点等。
  • parentElement: 这也是一个DOM属性,但它只返回父元素节点。如果父节点不是元素节点,则返回null。

考虑到你提供的Bootstrap代码示例,这段代码正在寻找具有特定选择器的所有祖先元素。在这种情况下,使用parentElement是更合适的选择,因为你的目标是只查找元素节点,而不是其他类型的节点。

如果你使用parentNode,可能会找到一些意想不到的节点,比如文本节点或注释节点,这可能不是你想要的结果。

因此,结论是:在Bootstrap的这段代码中,使用parentElement是更好的选择。

 类似资料:
  • 问题内容: 有人可以用尽可能简单的方式解释我吗,经典DOMparentNode和Firefox9parentElement中新引入的有什么区别? 问题答案: 是Firefox 9和DOM4的新功能,但是它已经存在于所有其他主流浏览器中已有很长时间了。 在大多数情况下,它与相同。唯一的区别是节点不是元素时。如果是,则为。 举个例子: 由于element()没有作为元素的父元素,因此is 。(还有其他

  • 本文向大家介绍你觉得用Dubbo 好还是SpringCloud好?相关面试题,主要包含被问及你觉得用Dubbo 好还是SpringCloud好?时的应答技巧和注意事项,需要的朋友参考一下 没有好坏,只有适合不适合。 dubbo的优势 单一应用架构,当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的 数据访问框架(ORM)是关键。 垂直应用架

  • 问题内容: 我正在开发一个显示图像并播放数据库声音的应用程序。我正在尝试确定是否使用单独的JFrame从GUI向数据库添加图像。 我只是想知道使用多个JFrame窗口是否是一种好习惯? 问题答案: 我只是想知道使用多个JFrames是否是一种好习惯? 坏习惯(坏习惯)。 用户不友好:用户只希望看到一个图标时,会在任务栏中看到多个图标。加上编码问题的副作用。 * 编写和维护代码的噩梦: * 一个模态

  • 直译更好还是意译更好?这也是困扰许多译者的一大问题。不但资深译者时常为此犯难,就是初学者,尚未动笔便发愁直译更好还是意译更好,因此步履维艰的,也到有人在。所以,说清楚直译和意译的问题大有必要。 什么是直译?直译即word-for-word translation,也称作literal translation,意思是“按原有的形式来翻译”。典型的例子是将“I have a pair of shoes

  • 问题内容: 首先,我必须说我对API java.util.concurrent很陌生,所以也许我正在做的事情是完全错误的。 我想怎么办? 我有一个Java应用程序,它基本上运行2个单独的处理(称为 myFirstProcess , mySecondProcess ),但是这些处理必须同时运行。 因此,我尝试这样做: myFirstProcess 和 mySecondProcess 是实现的类,它们

  • 这是我写一个html页面,我现在想要让右边刷新,导航栏不刷新。或者是整体刷新。 导航栏的代码: 对应页面被注释包裹,然后替换上去的代码 脚本: 做的尝试: 整体刷新:使用gulp inject的命令,我单独写了页头,导航栏,页脚的页面,每当我想要修改的时候,我就只修改单独的这些页面,然后执行gulp inject命令,然后gulp就会根据我页面中的特定注释包裹的地方替换掉对应的代码。 确实可以,不