JavaScript中Element与Node的区别,children与childNodes的区别

关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别。

Node(节点)是DOM层次结构中的任何类型的对象的通用名称,Node有很多类型,如元素节点,属性节点,文本节点,注释节点等,通过NodeType区分,常见的有:

节点类型NodeType
元素element1
属性attr2
文本text3
注释comments8
文档document9

更多节点类型参考:https://developer.mozilla.org/en-US/docs/DOM/Node.nodeType?redirectlocale=en-US&redirectslug=nodeType

  Element继承了Node类,也就是说Element是Node多种类型中的一种,即当NodeType为1时Node即为ElementNode,另外Element扩展了Node,Element拥有id、class、children等属性。

  以上就是Element跟Node的区别。

那么用document.getElementById("xxx")取到的是Node还是Element呢?我们来测试一下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Demo</title>
</head>
<body>
    <div id="test">
        <p>One</p>
        <P>Two</p>
    </div>
    <script>
        var oDiv=document.getElementById("test");
        console.log(oDiv instanceof Node);        //true
        console.log(oDiv instanceof Element);    //true
    </script>
</body>
</html>
View Code

 

我们可以看到用document.getElementById("xxx")取到的既是Element也是Node

  children是Element的属性,childNodes是Node的属性,我们再来测试一下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Demo</title>
</head>
<body>
    <div id="test">
        <p>One</p>
        <P>Two</p>
    </div>
    <script>
        var oDiv=document.getElementById("test");
        console.log(oDiv.children[0] instanceof Node);        //true
        console.log(oDiv.children[0] instanceof Element);    //true

        console.log(oDiv.childNodes[0] instanceof Node);    //true
        console.log(oDiv.childNodes[0] instanceof Element);    //false

        console.log(typeof oDiv.childNodes[0].children);    //undefined
        console.log(typeof oDiv.childNodes[0].childNodes);    //object
    </script>
</body>
</html>
View Code

通过上面的代码我们可以看到,Element的children[0]仍为Element,是Node和Element的实例,Node的childNdoes[0]为Node,只是Node的实例,不是Element的实例。

  同时,Node的children属性为为undefined

 

转载于:https://www.cnblogs.com/ron123/p/3764393.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 `element-plus` ,`el-tree` 组件也可以通过设置 `:render-after-expand` 属性来实现局部刷新。与 `element-ui` `el-tree` 的使用方式类似。 具体来说,当 `:render-after-expand` 属性设置为 `true` 时,节点展开时会重新渲染子节点;当 `:render-after-expand` 属性设置为 `false` 时,节点展开时不会重新渲染子节点。 以下是一个使用 `element-plus` 实现局部刷新的示例: ```vue <template> <el-tree :data="treeData" :render-after-expand="false"></el-tree> </template> <script> import { ref } from 'vue'; import { ElTree } from 'element-plus'; export default { components: { ElTree }, setup() { const treeData = ref([ { label: '节点1', children: [ { label: '子节点1-1' }, { label: '子节点1-2' } ] }, { label: '节点2', children: [ { label: '子节点2-1' }, { label: '子节点2-2' } ] } ]); return { treeData }; } }; </script> ``` 在上述示例,我们将 `:render-after-expand` 属性设置为 `false`,这样节点展开时不会重新渲染子节点,从而实现局部刷新的效果。 需要注意的是,当节点的子节点数据发生变化时,我们需要手动更新 `el-tree` 组件的数据。可以通过 `treeData.value = newData` 来更新节点的子节点数据,例如: ```javascript // 获取需要更新的节点 const node = this.$refs.tree.getNode('1'); // 更新节点的子节点数据 node.childNodes = [ { label: '新子节点1', key: '1-1-1' }, { label: '新子节点2', key: '1-1-2' } ]; // 更新 el-tree 组件的数据 this.treeData.value = this.treeData.value.slice(); ``` 以上代码将会更新节点 `1-1` 的子节点数据为 `新子节点1` 和 `新子节点2`。需要注意的是,更新节点的子节点数据时,需要手动更新 `el-tree` 组件的数据,否则 `el-tree` 组件无法检测到数据的变化。在 `element-plus` ,我们可以通过 `treeData.value = treeData.value.slice()` 来更新 `el-tree` 组件的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值